我尝试用Symbol
键创建对象并找到相应的值Symbol.for
,但它不起作用:
const sym = Symbol("x"); let obj = { [sym]: "val" } console.log(obj[sym]); // "val" console.log(obj[Symbol.for("x")]); // undefined, but expected "val"
为什么?
使用的符号Symbol()
是唯一且不可变的,因此您可以引用它的唯一方法是将其分配给变量.
重要的是要注意构造函数参数实际上是符号的描述,而不是键.来自MDN:
符号的描述,可用于调试但不能访问符号本身
(强调我的)
Symbol.for
另一方面,使用指定的密钥在全局注册表列表中存储符号,因此为了使您的示例工作,您需要使用以下命令创建和访问符号Symbol.for
:
const sym = Symbol.for("x"); // Create a symbol in the global registry let obj = { [sym]: "val" } console.log(obj[Symbol.for("x")]); // Access the symbol from the global registry