// 为什么需要symbol
// 1.容易造成属性名冲突,造成对象中原有的值
const s1 = Symbol()
const s2 = Symbol()
console.log(s1 === s2); //false
// 2.symbol中还可以传入一个description
const s3 = Symbol('aaa')
console.log(s3.description); //aaa
// 3.symbbol作为key
// 写法1
const obj = {
[s1]:'abc',
[s2]:'cba'
}
// 写法2
obj[s3] = 'bca'
// 写法3
const s4 = Symbol()
Object.defineProperty(obj,s4,{
enumerable:true,
configurable:true,
writable:true,
value:'mba'
})
// 不能通过.语法获取
console.log(obj[s1],obj[s2],obj[s3],obj[s4]); // abc cba bca mba
// 4.symbol作为key的属性名,在遍历/Object.keys 获取不到这些symbol值
// Object.getOwnPropertySymbols获取symbol的所有key
console.log(Object.getOwnPropertySymbols(obj));
// 5.symbol.for(description)
// 这样能创造两个全等的symbol
const sa = Symbol.for('aaa')
const sb = Symbol.for('aaa')
console.log(sa === sb); //true
const key = Symbol.keyFor(sa)
console.log(key);//Symbol(), Symbol(), Symbol(aaa), Symbol()
symbol的基本使用方式
最新推荐文章于 2024-04-24 09:22:16 发布