当前位置:  开发笔记 > 编程语言 > 正文

Symbol()和Symbol.for()之间的区别

如何解决《Symbol()和Symbol.for()之间的区别》经验,为你挑选了1个好方法。

我尝试用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"

为什么?



1> CodingIntrig..:

使用的符号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


从[MDN页面](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for):_"**与`Symbol()`相比, `Symbol.for()`函数创建一个全局符号注册表列表中可用的符号.**`Symbol.for()`也不一定在每次调用时创建一个新符号,但首先检查具有给定键的符号已经出现在注册表中."_所以``Symbol()`不会向任何全局注册表添加符号,只有`Symbol.for()`.(正如澄清一样.)
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有