在JS ES6(找到in this Mozilla article)中有 registry 符号这样的东西。
它与Symbol()
(relevant question on Stack Overflow)不同,可以通过Symbol.for(data)
获得。
致电
Symbol.for(string)
。这将访问一组称为符号注册表的现有符号。与Symbol()
定义的唯一符号不同,符号注册表中的符号是共享的。如果您致电Symbol.for("cat")
三十次,则每次都会返回相同的符号。当多个网页或同一网页中的多个模块需要共享符号时,注册表非常有用。
我一直在搜索有关此主题的信息,我已经在Stack Overflow上阅读了类似的问题(What is 'global symbol registry'?但是它没有涵盖这个问题 - 为什么要使用注册表符号代替字符串)。
虽然我似乎已经(几乎)得到了Symbol()
定义的唯一符号的所有内容,但注册表符号(Symbol.for()
)对我来说根本没有多大意义。
我的意思是,看一下示例there:
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)"
据我所知,字符串提供了完全相同的功能,不是吗?
所有关于保存/共享符号的文章都不清楚,因为保存和共享(至少似乎是!)主要是比较用于构建相应符号的字符串。
注册表符号的用途是什么以及如何使用它们与使用普通字符串不同(即,我希望看到一个我未能找到的示例)?