Set 是Es6的內(nèi)置對象。我們和后端進(jìn)行數(shù)據(jù)交互的時(shí)候,后端返回的數(shù)據(jù)通常有兩種,數(shù)組和對象。在Es6中又增加了兩種數(shù)據(jù)類型Set和Map,我們可以這樣認(rèn)為Set和Map就是一個(gè)殼,放的還是我們之前的數(shù)據(jù),比如,字符串、布爾值、數(shù)字等,只不過把他們包起來的并不是數(shù)組和對象,而是Set和Map兩種新的數(shù)據(jù)結(jié)構(gòu)了,切記,他們只是兩種新的數(shù)據(jù)結(jié)構(gòu),而不是新的數(shù)據(jù)類型。
Set 數(shù)據(jù)結(jié)構(gòu)構(gòu)造函數(shù)
1、它定義了Set數(shù)據(jù)結(jié)構(gòu)的用法;
2、它繼承Object的prototype上的屬性與方法;
3、部署了Iterator接;
4、它類似于數(shù)組,數(shù)據(jù)里不允許出現(xiàn)重復(fù)的值;
- 對于原始類型及null、undefined來說,值相等就相等,也就是長得一樣就是重復(fù)的兩個(gè)值
- 對于對象類型來說,值相等、引用相等才相等,也就是長得像不代表就是一個(gè)值
- Set內(nèi)部對于重復(fù)的值使用類似“===”的形式比較,但是NaN等于NaN
總結(jié):
1、原始類型數(shù)據(jù)、null、undefined、NaN,長一樣的不會(huì)同時(shí)出現(xiàn);
2、對象類型數(shù)據(jù)長一樣的會(huì)同時(shí)出現(xiàn);
const arr=['a',1,true,null,undefined,NaN,[12],function(){return 1},{a:10,b:20},'a',1,true,null,undefined,NaN,[12],function(){return 1},{a:10,b:20}];
console.log(
new Set(arr), //數(shù)組去重
[...new Set(arr)],
Array.from(new Set(arr)),
new Set(arr).size //12
);
生成實(shí)例
1、new Set();
參數(shù)可選,如果有參數(shù)必需是一個(gè)數(shù)組,或者具有Iterator接口的數(shù)據(jù)。
console.log(
new Set(), //Set(0) {}
new Set() instanceof Set , //true
new Set([12,23]), //Set(2) {12, 23}
new Set('luobing'), //Set(7) {"l", "u", "o", "b", "i","n","g"}
//new Set(true)
//new Set({1:'a',2:'b'})
new Set(obj)
)
Set(3) {li, li, li}
私有屬性(構(gòu)造函數(shù)屬性);
1、Set.name 構(gòu)造函數(shù)名字
共享屬性(實(shí)例屬性)
1、size 數(shù)據(jù)的個(gè)數(shù)
2、Symbol(Symbol.iterator) Iterator接口,遍歷器(指向values方法)
共享方法(實(shí)例方法)
1、add()
2、delete()
3、has()
4、clear()
5、keys()
6、values()
7、entries()
8、forEach()