- Set本身是一個構造函數
let set = new Set();
- Set函數可以接受一個數組作爲參數,用來初始化;
- 數組去重:
a.let newArr = [...new Set([1,2,2,3,3])]
;
b.let newArr = Array.from(new Set([1,2,2,3,3]));
- Set操作方法
a.add(value);return Set
;
b.delete(value);return boolean
;
c.has(value);return boolean
;
d.clear();
沒有返回值 - 數組的
map
和filter
方法也可以用於Set,在傳遞進去的方法是沒有返回值的。 - ES6的Map數據結構,它類似於對象,也是鍵值對的集合,但是”鍵”的範圍不限於字符串,各種類型的值都可以作爲鍵 。
- map的操作方法:
a.set(key,value)//return Set,因此可以採用鏈式寫法
b.get(key)//如果找不到key,就返回undefined
c.has(key)//return boolean
d.delete(key)//return boolean
e.clear()//沒有返回值
- Set和Map的遍歷:三個“遍歷器對象”生成函數,一個“遍歷方法”
a.keys()//返回鍵名的遍歷器
b.values()//返回鍵值的遍歷器
c.entries()//返回鍵值對的遍歷器,每一個元素都是[key,value]
d.forEach(funtion,context)//context表示function中this的指向
- Map和JSON之間的轉換;
strMapToObj(map)//將Map對象轉Object
a. 如果map
的key
是字符串:JSON.stringify(strMapToObj(map))
b. 如果map
的key
不是字符串,那麼可以轉成數組的JSON
,JSON.stringify([...map])
c.JSON
轉Map
還是先轉成“對象”或“數組”,再轉成Map
Symbol.iterator
屬性的實現
let obj = {
index:0,
[Symbol.iterator](){
let index = this.index//函數中最裏面能訪問外面,但對象不行
return {
next:function(){
if(index>3) return {value:undefined,done:true};
else return {value:index++,done:false};
}
}
}
}
for(let i of obj){
console.log(i);
}
運行結果:
利用generator函數實現Symbol.iterator屬性
let obj = {
*[Symbol.iterator](){
yield "aa";
yield* [1,2];
yield "bb";
}
}
for(let i of obj){
console.log(i);
}
運行結果:
總結:
1. Array,String
其實也就是特殊的Object
2. 只要當前對象的Symbol.iterator
實現了,就可以用for of
遍歷;默認實現了該屬性的“對象”有Array,Map,Set,String,函數的arguments對象
3. 只要實現了Symbol.iterator
的,都可以採用數組解構的解構賦值+擴展運算符(...
),let [x,...res] = "hello"//x=h,res = [e,l,l,o]
;
4. function
參數也可以採用擴展運算符: function fun(x,y){};let arr=[1,2];fun(...arr);
5. Array.from()//將Map或者Set類型轉爲數組
6. Array.of(1,2)//[1,2]//將一組數據轉成數組返回