原始類型:Symbol,用于創(chuàng)建必須通過(guò)Symbol才能引用的屬性,提供了一些私有性和不易覆蓋的特性。
1、創(chuàng)建Symbol
symbol在創(chuàng)建的時(shí)候,可以接受一個(gè)參數(shù),用來(lái)描述這個(gè)Symbol的文本字符串。

2、Symbol的使用方法
所有使用可計(jì)算屬性名的地方,都可以使用Symbol,看以下代碼:

3、Symbol共享體系
如果想要?jiǎng)?chuàng)建一個(gè)共享的Symbol,就使用Symbol.for()方法,它接受一個(gè)參數(shù),用來(lái)創(chuàng)建Symbol的字符串標(biāo)識(shí)符。Symbol.for()方法首先在全局Symbol注冊(cè)部查找是否存在Symbol,存在則直接返回,不存在則創(chuàng)建一個(gè)新的。例如一下代碼:

4、Symbol與類型強(qiáng)制轉(zhuǎn)換
Symbol不能強(qiáng)制轉(zhuǎn)換成字符串和數(shù)字類型。例如一下代碼:

5、Symbol屬性檢索
Object.getOwnPropertySymbols()方法來(lái)檢索對(duì)象中的Symbol屬性。例如:

6、通過(guò)well-known Symbol暴露內(nèi)部操作
(1)Symbol.hasInstance ?一個(gè)在執(zhí)行instanceof時(shí)調(diào)用的內(nèi)部方法,用于檢測(cè)對(duì)象的繼承信息。
(2)Symbol.isConcatSpreadable ?一個(gè)布爾值,用于表示當(dāng)傳遞一個(gè)集合作為Array.prototype.concat()方法的參數(shù)時(shí),是否英愛(ài)將集合內(nèi)的元素規(guī)整到同一層級(jí)。
(3)Symbol.iterator ?一個(gè)繁華迭代器的方法。
(4)Symbol.match ?一個(gè)調(diào)用String.prototype.match()方法時(shí)調(diào)用的方法,用于比較字符串。
(5)Symbol.replace ?一個(gè)調(diào)用String.prototype.replace()方法時(shí)調(diào)用的方法,用于替換字符串的子串。
(6)Symbol.search ?一個(gè)調(diào)用String.prototype.search()方法時(shí)調(diào)用的方法,用于在字符串中定位子串。
(7)Symbol.species ?用于創(chuàng)建派生對(duì)象的構(gòu)造函數(shù)。
(8)Symbol.split ?一個(gè)在調(diào)用String.prototype.split()方法時(shí)調(diào)用的方法,用于分割字符串。
(9)Symbol.toPrimitive ?一個(gè)返回對(duì)象原始值的方法。
(10)Symbol.toStringTag ?一個(gè)在調(diào)用Object.prototype.toString()方法時(shí)使用的字符串,用戶創(chuàng)建對(duì)象描述。
(11)Symbol.unscopables ?一個(gè)定義了一些不可被with語(yǔ)句引用的對(duì)象屬性名稱的對(duì)象集合。
重寫這些方法,可以改變對(duì)象內(nèi)部的默認(rèn)行為,從而可以實(shí)現(xiàn)一些自定義的方法和行為。