ES6 symbol資料型別
阿新 • • 發佈:2018-12-14
Symbol 值通過Symbol
函式生成。這就是說,物件的屬性名現在可以有兩種型別,一種是原來就有的字串,另一種就是新增的 Symbol 型別。凡是屬性名屬於 Symbol 型別,就都是獨一無二的,可以保證不會與其他屬性名產生衝突。我們知道當我們宣告相同相同的屬性名的時候後面的會覆蓋點前面宣告的,如下:
const classRoom={
lili:{grade:60,gender:'female'},
marray:{grade:80,gender:'female'}
marray:{grade:90,gender:'female'}
}
console.log(classRoom);
可以看出後面的屬性覆蓋了前面的同名屬性。
使用Symbol函式:
const classRoom={
[Symbol('lili')]:{grade:60,gender:'female'},
[Symbol('marray')]:{grade:80,gender:'female'}
[Symbol('marray')]:{grade:90,gender:'female'}
}
console.log(classRoom);
執行結果:
但是不能使用for in 遍歷
for (let key in classRoom) {
console.log(key);//什麼都沒有打印出來
}
那麼如何獲取物件的屬性呢,可以使用Object.getOwnPropertySymbols (classRoom)
要獲取到屬性的值可以用map方法
const pro =Object.getOwnPropertySymbols (classRoom);
pro.map(syms=>{
console.log(classRoom[syms]);
});