Symbol類型是es6新增的一個(gè)數(shù)據(jù)類型,Es5的基本數(shù)據(jù)類型(undefined,null,Object,Number,String,boolean)或者說是(undefined,null,Number,String,Boolean,F(xiàn)unction,Array)。
Symbol值通過Symbol函數(shù)生成
Symbol類型是保證每個(gè)屬性的名字都是獨(dú)一無(wú)二的,對(duì)于一個(gè)對(duì)象由對(duì)個(gè)模塊構(gòu)成的情況非常有用,其實(shí)說白了就是就是類似與特殊符號(hào)的一個(gè)類型,因?yàn)橐驗(yàn)榫哂形ㄒ恍运蕴厥?,說到唯一性,就不得不說Set和Map了,這個(gè)兩個(gè)東西其實(shí)算不上是兩種數(shù)據(jù)類型,我覺得應(yīng)該稱為數(shù)據(jù)結(jié)構(gòu)更貼切,但大家都這么叫,這里也就姑且認(rèn)為是數(shù)據(jù)類型吧。Set和Map這兩個(gè)東西本身是一個(gè)類,可以看作構(gòu)造函數(shù),可以使用new關(guān)鍵字來(lái)實(shí)例化生成實(shí)例對(duì)象,它們生成的實(shí)例對(duì)象有一個(gè)明顯的特點(diǎn),就是成員的唯一性,它們實(shí)例化出來(lái)的對(duì)象結(jié)構(gòu)類似于一個(gè)數(shù)組,但是這個(gè)類數(shù)組結(jié)構(gòu)中的每一個(gè)元素都是唯一的,不重復(fù)的,所以一些簡(jiǎn)單的去重操作我們也可以使用它們,好了廢話不多說,下面開始干貨!
Set:? ??
聲明:
let set = new Set();//空集合
let set2 = new Set(['one','two']);//有內(nèi)容的集合
由于集合的沒有重復(fù)元素的特點(diǎn),所以不管怎么聲明,重復(fù)元素都會(huì)被剔除掉:

控制臺(tái)打印一下Set的原型:

這里說一下常用的一些東西,我習(xí)慣叫一個(gè)屬性四個(gè)方法(主要是因?yàn)楹糜洠?/p>
一個(gè)屬性:size(集合大小,類似與數(shù)組的length)a.size; //3
四個(gè)方法:add(),delete(),has(),clear()
add():將元素添加至末位
add()方法因?yàn)樽詭Х祷刂邓晕覀冊(cè)谑褂玫臅r(shí)候可以進(jìn)行鏈?zhǔn)秸{(diào)用
let set= newSet(["one","two"]);
set.add("three").add("four");
console.log(set); //["one","two","three","four"]
并且可以這樣:console.log(set.add("five"));?//["one","two","three","four","five"]
delete(parameter):刪除元素,parameter為你要?jiǎng)h除的元素的值value

通過這個(gè)例子我們可以看出,delete()返回的結(jié)果是一個(gè)Boolean值,所以是不可以像add()那樣鏈?zhǔn)秸{(diào)用的,否則就會(huì)報(bào)delete() is not a function
has():函數(shù)判斷集合中有沒有某個(gè)元素
let set = new Set(["one", "two"]);
console.log(set.has("one")); //true
console.log(set.has("three")); //false
clear():清空一個(gè)集合
這個(gè)方法是沒有返回值的,只是單純清空了這個(gè)集合

Map:
它類似于對(duì)象,也是鍵值對(duì)的集合,但是“鍵”的范圍不限于字符串,各種類型的值(包括對(duì)象)都可以當(dāng)作鍵。也就是說,Object 結(jié)構(gòu)提供了“字符串—值”的對(duì)應(yīng),Map 結(jié)構(gòu)提供了“值—值”的對(duì)應(yīng),是一種更完善的 Hash 結(jié)構(gòu)實(shí)現(xiàn)。如果你需要“鍵值對(duì)”的數(shù)據(jù)結(jié)構(gòu),Map 比 Object 更合適。
?聲明:
Map的聲明直接new Map()
這里Map常用的東西和Set差不多但還是有區(qū)別的,Map沒有add方法,但是比Set多了set和get方法,刪除和清空都和Set都是一樣的delete和clear,判斷是否有某個(gè)值也可以使用has方法,這些方法的參數(shù)為集合元素的鍵。
這里主要說一下get和set:
let json={ name:"websong",skili:"web"};
var msp=new Map();
msp.set(json,'iam'); //這里是設(shè)置一個(gè)鍵值對(duì),以json這個(gè)對(duì)象為鍵嗎,"iam"這個(gè)字符串是json這個(gè)鍵的值
console.log(msp);//Map(1)?{{…} => "iam"}
msp.set('niubi','111');//這里同樣也是設(shè)置一個(gè)鍵值對(duì),以字符串'niubi'為鍵,字符串'111'為它的值
console.log(msp);//Map(2)?{{…} => "iam", "niubi" => "111"}
總結(jié)下來(lái),Set的實(shí)例化對(duì)象是一個(gè)類數(shù)組的結(jié)構(gòu),并且是一個(gè)元素具有唯一性的數(shù)組對(duì)象,而Map的實(shí)例化對(duì)象就是單純的鍵值對(duì)集合,但是這個(gè)鍵值對(duì)可以使用對(duì)象或是其它東西來(lái)充當(dāng)鍵,其實(shí)也可以將Map當(dāng)作一個(gè)類數(shù)組對(duì)象,只是我們可以使用對(duì)象來(lái)定義數(shù)組元素的下標(biāo)。