我花了一段时间,但我终于弄明白ECMAScript 6中符号的用途是什么:在将属性附加到共享对象时避免名称冲突 - HTML元素例如(如果你遇到同样的问题,我推荐这篇文章. )
但后来我偶然发现了Symbol.for().显然,ECMAScript 6将维护一个全局符号注册表,您可以通过提供符号描述来使用此函数进行查询.再来?如果我使用符号来避免名称冲突,为什么我要使用除我自己之外的代码来使用它们呢?(*)我如何避免全局注册表中的名称冲突?共享符号似乎完全颠覆了这个概念,而全球注册表则更是如此.
(*)是的,我知道符号不是真正的私有,但除此之外.
JS ES6 中有注册表符号这样的东西(可在这篇 Mozilla 文章中找到)。
它与Symbol()(有关 Stack Overflow 的相关问题)不同,可以通过Symbol.for(data).
打电话
Symbol.for(string)。这将访问一组称为符号注册表的现有符号。与由 定义的唯一符号不同Symbol(),符号注册表中的符号是共享的。如果你调用Symbol.for("cat")三十次,它每次都会返回相同的符号。当多个网页或同一网页中的多个模块需要共享一个符号时,注册表非常有用。
我一直在搜索关于这个主题的信息,我在 Stack Overflow 上读过类似的问题(有什么是“全局符号注册表”?但它没有涵盖这个问题 - 为什么使用注册表符号而不是字符串)。
尽管我似乎已经获得了(几乎)关于用 定义的唯一符号的所有信息Symbol(),但注册表符号 ( Symbol.for()) 对我来说根本没有多大意义。
我的意思是,看看那里的例子:
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'); …Run Code Online (Sandbox Code Playgroud)