關(guān)于Symbol
一、概念
Symbol是ECMAScript 6新增的基本數(shù)據(jù)類型。Symbol是原始值,且Symbol實(shí)例是唯一、不可變的。Symbol的用途是確保對(duì)象屬性使用唯一標(biāo)識(shí)符,不會(huì)發(fā)生屬性沖突的危險(xiǎn)。
二、基本使用
作為對(duì)象的屬性,有以下三種書寫方式:打印結(jié)果都是‘hello’
| 第一種 | 第二種 | 第三種 |
|
let mySymbol = Symbol() |
let mySymbol = Symbol() |
let mySymbol = Symbol() |
注意:因?yàn)閟ymbol是原始類型,所以typeof操作符對(duì)其返回symbol
let sym = Symbol();
console.log(typeof sym); // symbol
三、symbol參數(shù)
調(diào)用Symbol()函數(shù)時(shí),也可以傳入一個(gè)字符串參數(shù)作為對(duì)符號(hào)的描述(description),將來可以通過這個(gè)字符串來調(diào)試代碼。如下案例:
let s = Symbol('a')
let ss = Symbol('a')
console.log(s == 's') // false
分析:字符串a(chǎn)表示一種修飾,對(duì)你當(dāng)前創(chuàng)建Symbol類型的一種修飾,作為區(qū)分使用,否則當(dāng)你創(chuàng)建多個(gè)Symbol數(shù)據(jù)時(shí),容易混淆。
四、唯一性
上述三中的案例也能看出來symbol具有唯一性特點(diǎn)。
五、遍歷
Symbol作為屬性名,該屬性不會(huì)出現(xiàn)在for…in,for…of循環(huán)中,也不會(huì)被Object.keys(),Object.getOwnPropertyNames(),JSON.stringify()返回。所以我們可以用Object.getOwnPropertySymbols方法,獲取指定對(duì)象的所有Symbol屬性名。
新API方法:Reflect.ownKeys(),可以返回對(duì)象所有的屬性,包含Symbol屬性。
getOwnPropertyDescriptors():獲取指定對(duì)象的自身屬性描述符
1 let person = { 2 name:'小明', 3 age: 12, 4 [Symbol('level')]: 'A' 5 } 6 console.log((Object.keys((person)))) 7 console.log(Object.getOwnPropertyNames(person)) 8 console.log(Object.getOwnPropertySymbols(person)) 9 console.log(Reflect.ownKeys(person)) 10 console.log(Object.getOwnPropertyDescriptors(person))
結(jié)果:


浙公網(wǎng)安備 33010602011771號(hào)