- Symbol 是一种新的原始数据类型,表示独一无二的值
const sym1 = Symbol('sym')
const sym2 = Symbol('sym')
console.log(sym1 === sym2) // false
- Symbol 可以通过 Symbol() 函数来生成,它不是构造函数没有 constructor 属性,所以不能通过 new Symbol() 来创建,不是对象所以也不能通过 . 来赋值,可以在 Symbol 函数中传入一个字符串表示说明,通过 description 属性来获取
const sym1 = Symbol('sym')
sym1.name = 'symbol'
console.log(sym1) // Symbol(sym)
console.log(sym1.name) // undefined
console.log(sym1.description) // sym
const obj1 = {
name: 'sym'
}
const obj2 = {
name: 'sym'
}
const obj3 = {
[obj1.name]: 'sym1',
[obj2.name]: 'sym2'
}
console.log(obj3) // { sym: 'sym2' }
console.log(obj3[obj1.name]) // sym2
console.log(obj3[obj2.name]) // sym2
const obj1 = {
name: 'sym',
key: Symbol('sym')
}
const obj2 = {
name: 'sym',
key: Symbol('sym')
}
const obj3 = {
[obj1.key]: 'sym1',
[obj2.key]: 'sym2'
}
console.log(obj3) // { [Symbol(sym)]: 'sym1', [Symbol(sym)]: 'sym2' }
console.log(obj3[obj1.key]) // sym1
console.log(obj3[obj2.key]) // sym2
const sym = Symbol()
const obj = {
name: 'sym',
[sym]: 'symbol'
}
for(let k in obj) {
console.log(k) // name
}
Object.getOwnPropertySymbols(obj).forEach(n => {
console.log(n) // Symbol()
})
Reflect.ownKeys(obj).forEach(j => {
console.log(j) // name Symbol()
})
网友评论