Symbol的使用
是什么?
Symbol是ES6中新增的一個(gè)基本數(shù)據(jù)類(lèi)型,翻譯為符號(hào)。
為什么?
在ES6之前,對(duì)象的屬性名都是字符串形式,那么很容易造成屬性名的沖突;
- 如原來(lái)有一個(gè)對(duì)象,我們希望在其中添加一個(gè)新的屬性和值,但是我們?cè)诓淮_定它原來(lái)內(nèi)部有什么內(nèi)容的情況下,很容易造成沖突,從而覆蓋掉它內(nèi)的某個(gè)屬性;
- 如仿照實(shí)現(xiàn)apply、call、bind實(shí)現(xiàn)時(shí),我們有給其中添加一個(gè)fn屬性,那么如果它內(nèi)部原來(lái)已經(jīng)有了fn屬性了
呢? - 比如開(kāi)發(fā)中我們使用混入,那么混入中出現(xiàn)了同名的屬性,必然有一個(gè)會(huì)被覆蓋掉;
Symbol就是為了解決上面的問(wèn)題,用來(lái)生成一個(gè)獨(dú)一無(wú)二的值。
- Symbol值是通過(guò)Symbol函數(shù)來(lái)生成的,生成后可以作為屬性名;也就是在ES6中,對(duì)象的屬性名可以使用字符串,也可以使用Symbol值;
- Symbol即使多次創(chuàng)建值,它們也是不同的:Symbol函數(shù)執(zhí)行后每次創(chuàng)建出來(lái)的值都是獨(dú)一無(wú)二的;
- 可以在創(chuàng)建Symbol值的時(shí)候傳入一個(gè)描述description:這個(gè)是ES2019(ES10)新增的特性;
使用示例

image.png

image.png
使用symbol創(chuàng)建相同的值
使用Symbol.for方法來(lái)做到這一點(diǎn);
并且我們可以通過(guò)Symbol.keyFor方法來(lái)獲取對(duì)應(yīng)的key;

image.png