对于以下代码,
let obj = {
[Symbol('my_key')]: 1,
enum: 2,
nonEnum: 3
}
document.write(Symbol.keyFor(Symbol.for('my_key')) + '<br>'); // retrieves 'my_key'
document.write(Symbol.keyFor(Object.getOwnPropertySymbols(obj)[0])); // does not retrieve 'my_key'
以下是输出:
my_key
undefined
为什么Symbol.keyFor()
在第二种情况下无法检索令牌字符串?
答案 0 :(得分:1)
来自MDN:
Symbol.keyFor(sym)方法从给定符号的全局符号注册表中检索共享符号键。
在第一种情况下,您使用全局符号,但使用本地符号作为对象键:
// local symbol
Symbol('my_key')
// global symbol
Symbol.for('my_key')
当你在对象文字中使用全局符号时,它会像你期望的那样工作:
let obj = {
[Symbol.for('my_key')]: 1,
enum: 2,
nonEnum: 3
}
全局符号存储在全局符号注册表中。如何存储本地符号取决于您。这里说明了两者之间的区别:
Symbol('my_key') === Symbol('my_key') // false
Symbol.for('my_key') === Symbol.for('my_key') // true