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

nic*_*ael 5 javascript 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'); // false

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

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

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

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