有这样一件事registryJS ES6 中的符号(发现在这篇 Mozilla 文章中 https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/).
它不同于Symbol()
(Stack Overflow 上的相关问题 https://stackoverflow.com/questions/21724326/what-is-the-motivation-for-bringing-symbols-to-es6),并且可以通过以下方式获得Symbol.for(data)
.
Call Symbol.for(string)
。这将访问一组称为符号注册表。与定义的独特符号不同Symbol()
,符号注册表中的符号是共享的。如果你打电话Symbol.for("cat")
三十次,每次都会返回相同的符号。当多个网页或同一网页中的多个模块需要共享符号时,注册表非常有用。
我一直在搜索有关此主题的信息,我在 Stack Overflow 上读过类似的问题(有什么是“全局符号注册表”? https://stackoverflow.com/questions/31897015/what-is-global-symbol-registry但它没有涵盖这个问题 - 为什么使用注册表符号而不是字符串)。
尽管我似乎已经(几乎)获得了有关用 定义的独特符号的所有信息Symbol()
,注册表符号(Symbol.for()
)对我来说根本没有多大意义。
我的意思是,看看例子there https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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'); // false
// The key is also used as the description
var sym = Symbol.for('mario');
sym.toString(); // "Symbol(mario)"
据我了解,字符串提供完全相同的功能,不是吗?
所有这些关于保存/共享符号的文章都不清楚,因为保存和共享(至少看起来是!)本质上是比较用于构建相应符号的字符串。
注册表符号的目的是什么以及使用它们与使用纯字符串有何不同(即,我想查看一个我未能找到的示例)?