Symbol數(shù)據(jù)類型
Synmbol 數(shù)據(jù)類型提供一個獨一無二的值。
Symbol的聲明
{
// 聲明
let a1=Symbol(); // 這里沒有 new
let a2=Symbol();
console.log(a1===a2); // false
let a3=Symbol.for('a3'); // 返回由給定的 key 找到的 symbol,否則就是返回新創(chuàng)建的 symbol
let a4=Symbol.for('a3');
console.log(a3, a4, a3===a4); // Symbol(a3) Symbol(a3) true
}
Symbol的使用
根據(jù)規(guī)范着倾,對象屬性鍵只能是string類型或symbol類型,不能是number缓熟、boolean今艺,只有string和symbol兩種類型。
{
let a1=Symbol.for('abc');
let obj={
[a1]:'123',
'abc':345,
'c':456
};
console.log('obj',obj); // {abc: 345, c: 456, Symbol(abc): "123"}
// 注意:對象中侯谁,symbol 做屬性值,通過 for in 和 for of 拿不到屬性值
for(let [key,value] of Object.entries(obj)){
console.log('let of',key,value); // abc 345 // c 456
}
Object.getOwnPropertySymbols(obj).forEach(function(item){ // api 結(jié)果是數(shù)組
console.log(obj[item]); // 123
})
Reflect.ownKeys(obj).forEach(function(item){ // api 返回數(shù)組包含symbol和非symbol
console.log('ownkeys',item,obj[item]); // abc 345 c 456 Symbol(abc) 123
})
}