Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';Javascript ES6中注册表符号(Symbol.for)的用途是什么?_Javascript_Ecmascript 6 - Fatal编程技术网

什么';Javascript ES6中注册表符号(Symbol.for)的用途是什么?

什么';Javascript ES6中注册表符号(Symbol.for)的用途是什么?,javascript,ecmascript-6,Javascript,Ecmascript 6,在JSES6(已找到)中有一个注册表符号 它不同于Symbol()(),可以通过Symbol.for(data)获得 调用Symbol.for(字符串)。这将访问一组称为符号注册表的现有符号。与Symbol()定义的唯一符号不同,符号注册表中的符号是共享的。如果您调用Symbol.for(“cat”)三十次,它每次都会返回相同的符号。当多个网页或同一网页内的多个模块需要共享一个符号时,注册表非常有用 我一直在搜索关于这个主题的信息,我读过关于堆栈溢出的类似问题(有一些问题,但没有涉及到这个问题-

在JSES6(已找到)中有一个注册表符号

它不同于
Symbol()
(),可以通过
Symbol.for(data)
获得

调用
Symbol.for(字符串)
。这将访问一组称为符号注册表的现有符号。与
Symbol()
定义的唯一符号不同,符号注册表中的符号是共享的。如果您调用Symbol.for(“cat”)三十次,它每次都会返回相同的符号。当多个网页或同一网页内的多个模块需要共享一个符号时,注册表非常有用

我一直在搜索关于这个主题的信息,我读过关于堆栈溢出的类似问题(有一些问题,但没有涉及到这个问题-为什么使用注册表符号而不是字符串)

虽然我似乎已经(几乎)了解了使用
Symbol()
定义的唯一符号的所有信息,但是注册表符号(
Symbol.for()
)对我来说没有多大意义

我是说,看看这些例子:

据我所知,字符串提供了完全相同的功能,不是吗

所有关于保存/共享符号的文章都不清楚,因为保存和共享本质上是(至少看起来是!)比较用于构建相应符号的字符串


注册表符号的用途是什么?使用它们与使用普通字符串有什么不同(即,我想看一个我没有找到的示例)?

是否回答了您的问题?(该主题与您已经找到的主题相链接)@Bergi并非真的-“不可枚举性”已经包含在相应的功能
对象中。defineProperty
,共享的概念仍然不清楚。我甚至不认为它至少比localStorage有用,因为它们似乎没有保存任何东西。不与字符串属性冲突的事实也没有那么有用,@Bergi,(至少看起来是这样)因为它们可能会相互冲突。当对象用作字典(如
映射
)时,不与字符串冲突是非常重要的,对于遗留代码中的“普通”属性也是如此。看看为内置符号启用的东西,比如
Symbol.iterator
(也在领域之间共享)<代码>符号。for让用户代码也能做到同样的事情。目的是它们的好处-应用程序范围内的令牌本质上是不可枚举的(无定义属性),不需要像
\uuuuufoo\uufoo\ucode>这样的神奇属性名称,也不污染全局命名空间(符号本身除外)。正如上面所说,您可以创建自定义全局符号,类似于Symbol.iterator。我相信这也包括在内。因为它们可以互相碰撞——如果它们有可能发生碰撞,这不是Symbol的用例。对于Symbol,请改用Symbol()。如果应用程序使用模块,请使用Symbol()并导入。
Symbol.for('foo'); // create a new global symbol
Symbol.for('foo'); // retrieve the already created symbol

// Same global symbol, but not locally
Symbol.for('bar') === Symbol.for('bar'); // true

//ADDED BY ME
Symbol.for('far') === Symbol.for('bar'); // false

// The key is also used as the description
var sym = Symbol.for('mario');
sym.toString(); // "Symbol(mario)"