ECMAScript -18 Symbol 扩展
console.info(
Symbol('a') === Symbol('a') // 永远不会相等
)
const s1 = Symbol.for('foo') // 字符串作为参数,相同的字符串返回相同的Symbol值
const s2 = Symbol.for('foo')
console.info(s1 === s2) // true
// 如果传入的不是字符串会转换成字符串
console.info(Symbol.for('true') === Symbol.for(true)) // true
const obj = {}
info(obj.toString()) // >>>> [object Object] toString标签
const obj = {
[Symbol.toStringTag]: 'XObject' // toStringTag 内置的Symbol对象
}
info(obj.toString()) // >>>> [object XObject]
const obj = {
[Symbol.toStringTag]: 'XObject' // toStringTag 内置的Symbol对象
}
console.info(obj.toString()) // >>>> [object XObject]
const obj = {
[Symbol.toStringTag]: 'CustomerObject' // toStringTag 内置的Symbol对象
}
console.info(obj.toString()) // >>>> [object CustomerObject]
const name1 = Symbol()
const name2 = Symbol()
const name3 = Symbol()
const obj = {
[name1]: 'Symbol value 1',
[name2]: 'Symbol value 2',
[name3]: 'Symbol value 3',
foo: 'normal value'
}
// 🚀🚀🚀🚀 以下3种方式都无法拿到Symbol类型的属性 🚀🚀🚀🚀
// 1
for (var key in obj) {
console.info(key) // foo,无法拿到Symbol类型的属性名
}
// 2.
console.info(Object.keys(obj)) // [ 'foo' ]
// 3.
console.info(JSON.stringify(obj)) // {"foo":"normal value"}
// 所以特别适合作为对象的私有属性
// 🚀🚀🚀 如何获取对象的Symbol属性 和 value 🚀🚀🚀
console.info(Object.getOwnPropertySymbols(obj)) // [ Symbol() ]
const syms = Object.getOwnPropertySymbols(obj)
for (let i = 0; i < syms.length; i++) {
console.info(syms[i])
console.info(obj[syms[i]])
}
// 输出结果
// Symbol() Symbol value 1
// Symbol() Symbol value 2
// Symbol() Symbol value 3
Keep learning

浙公网安备 33010602011771号