set map symbol

setjavascript

聲明html

let set = new Set();即建立了一個空的setjava

賦值數組

let set = new Set(['張三','李四','王五']);函數

特性spa

似於數組,但它的一大特性就是全部元素都是惟一的,沒有重複。code

咱們能夠利用這一惟一特性進行數組的去重工做。htm

let set = new Set([1, 2, 2, 3, 4, 3, 5])
console.log(set) //Set(5) {1, 2, 3, 4, 5}
let arr1 = [1, 2, 3, 4]
let arr2 = [2, 3, 4, 5, 6]
let set2 = new Set([...arr1,...arr2])  //...是set轉數組 後面有詳細的
console.log(set2)//Set(6) {1, 2, 3, 4, 5,6}

 記住一個屬性和4個方法對象

屬性blog

set.size  長度

方法

add  增長
console.log(set.add('劉德華').add('旋之華'));
delete  刪除
console.log(set.delete('張三'));
console.log(set.delete('李四'));
console.log(set);
has 檢測是否含有  返回true和false
console.log(set.has('張三'));
console.log(set.has('張三1'));
clear  清楚所有 沒有返回值
console.log(set.clear()); // undefined
console.log(set);

 ste和array互轉

數組轉set
let set = new Set(new Array(7, 8, 9))
console.log(set)    // Set(3) {7, 8, 9
set轉數組
let set4 = new Set([4, 5, 6])
console.log('方式一:', [...set4])            //方式一: (3) [4, 5, 6]      
console.log('方式二:', Array.from(set4))    //方式二: (3) [4, 5, 6]

遍歷

可使用Set實例對象的keys(),values(),entries()方法進行遍歷。

因爲Set的鍵名和鍵值是同一個值,它的每個元素的key和value是相同的,全部keys()和values()的返回值是相同的,entries()返回的元素中的key和value是相同的。

let set5 = new Set([4, 5, 'hello'])
console.log(' useing Set.keys()')
for(let item of set5.keys()) {
console.log(item)
}

console.log(' useing Set.values()')
for(let item of set5.values()) {
console.log(item)
}

console.log(' useing Set.entries()')
for(let item of set5.entries()) {
console.log(item)
}

結果

 useing Set.keys()
5
hello

 useing Set.values()

5
hello

 useing Set.entries()
[ 4, 4 ]
[ 5, 5 ]
[ 'hello', 'hello' ]

 

map   和set大同小異

  1. 建立一個Map

 let obj1 = {a: 1}, obj2 = {b: 2};
    const  map = new Map([
        ['name', '張三'],
        ['age', 18],
        ['sex', '男'],
        [obj1, '今每天氣很好'],
        [obj2, '適合敲代碼'],
        [[1,2], 'hhh']
    ]);
   console.log(map); 
  console.log(map.size);
方法
set和get
    map.set('friends', ['趙六', '力氣']).set(['dog'], '小花');
   console.log(map);
   console.log(map.get('name'));
   console.log(map.get(obj1));

  

delete has clear

和set同樣

// delete
   map.delete(obj1);                               //  刪除指定的元素
   console.log(map.delete('xxxx'));
   console.log(map);
   // has
   console.log(map.has(obj1));  //有就返回true
   console.log(map.has(obj2));  //沒有就返回false
   // clear
   map.clear();              //清空整個map
   console.log(map);

  

keys() values() entries()

let obj1 = {a: 1}, obj2 = {b: 2};
const map = new Map([
['name', '張三'],
['age', 18],
['sex', '男'],
[obj1, '今每天氣很好'],
[obj2, '適合敲代碼'],
[[1,2], 'hhh']
]);
map.forEach(function (value, index) {
        console.log(index + ':' + value);
    })

 

遍歷

let obj1 = {a: 1}, obj2 = {b: 2};
const map = new Map([
['name', '張三'],
['age', 18],
['sex', '男'],
[obj1, '今每天氣很好'],
[obj2, '適合敲代碼'],
[[1,2], 'hhh']
]);

map.forEach(function (value, index) {
console.log(index + ':' + value);
})

//打印結果

name:張三
 age:18
75 sex:男
 [object Object]:今每天氣很好
5 [object Object]:適合敲代碼
1,2:hhh

注意事項

map.set({}, '呵呵呵呵呵');
 map.set({}, '哈哈哈哈');
 console.log({} === {});   //打印結果false

 對象是引用類型,他們在堆區存放的地址是不同的 因此不全等!!  既然都作到這裏了 那就來全面的複習複習 引用數據類型和基本數據類型的區別和堆棧的概念吧!! 

    地址: http://www.javashuo.com/article/p-ylvmsngs-ew.html

symbol

Symbol是由ES6規範引入的一項新特性,它的功能相似於一種標識惟一性的ID。一般狀況下,咱們能夠經過調用Symbol()函數來建立一個Symbol實例:

let s1 = Symbol()

或者,你也能夠在調用Symbol()函數時傳入一個可選的字符串參數,至關於給你建立的Symbol實例一個描述信息:

let s2 = Symbol('another symbol')

因爲Symbol是一種基礎數據類型,因此當咱們使用typeof去檢查它的類型的時候,它會返回一個屬於本身的類型symbol,而不是什麼stringobject之類的:

typeof s1  // 'symbol'

每一個Symbol實例都是惟一的。所以,當你比較兩個Symbol實例的時候,將總會返回false

let s1 = Symbol()
let s2 = Symbol('another symbol')
let s3 = Symbol('another symbol')
s1 === s2 // false
s2 === s3 // false

用法

最大的用法是用來定義對象的惟一屬性名。

因爲每個 Symbol 的值都是不相等的,因此 Symbol 做爲對象的屬性名,能夠保證屬性不重名。

let sy = Symbol("key1");
// 寫法1
let syObject = {};
syObject[sy] = "kk";
console.log(syObject);    // {Symbol(key1): "kk"}
// 寫法2
let syObject = {
  [sy]: "kk"
};
console.log(syObject);    // {Symbol(key1): "kk"}

  

const obj = {};
    obj.name = '張三';
    obj.name = '李四';
    obj[Symbol('name')] = '張三';
    obj[Symbol('name')] = '李四';
    console.log(obj);   //name: "李四"Symbol(name): "張三"Symbol(name): "李四" 對象設置相同name會覆蓋,而symbol不會
相關文章
相關標籤/搜索