我花了一些时间,最终明白ECMAScript 6中符号的目的是什么:在将属性附加到共享对象(如HTML元素)时避免名称冲突。(如果你也在困惑同样的问题,我推荐阅读这篇文章。)
但接着我发现了Symbol.for()。显然ECMAScript 6将维护一个全局符号注册表,可以通过此函数提供符号描述来查询该注册表。再说一遍?如果我使用符号来避免名称冲突,为什么我希望除我自己之外的代码也使用它们呢?(*) 而且我怎么避免在那个全局注册表中出现名称冲突呢?共享符号似乎完全颠覆了这个概念,而全局注册表更是如此。
(*) 是的,我知道符号并不是真正的私有,但这并不重要。
Symbol('some description');
并不会在全局注册表中注册内容。只有当您通过Symbol.for
显式请求全局注册的符号时才会注册。 - loganfsmyth