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

时间:2018-04-02 21:26:07

标签: javascript ecmascript-6

在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)"

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

所有关于保存/共享符号的文章都不清楚,因为保存和共享(至少似乎是!)主要是比较用于构建相应符号的字符串。

注册表符号的用途是什么以及如何使用它们与使用普通字符串不同(即,我希望看到一个我未能找到的示例)?

0 个答案:

没有答案