我们知道what the global symbol registry (GSR) is
它是全球性的,我可以使用Symbol.for
和Symbol.keyFor
访问其数据。
window
是全球性的,我可以使用其名称访问它。
GSR是否有类似的机制,还是私人全球注册机构?
答案 0 :(得分:2)
window
对象与GSR非常不同(当然,更少"全局")
不,GSR不表示为JS代码可访问的对象,具有键值对的属性(或者可能是Map
)。如果您正在寻找它,则无法枚举。访问它的唯一方法是Symbol.for
和Symbol.keyFor
,这足以暴露关系的双射属性。
这可能(阅读:我的猜测)是为了简化实施。 GSR需要弱处理符号引用,当使用它们的所有领域都被终止时,它们应该被垃圾收集。此外,访问它的多个域可能在不同的线程中运行,这增加了复杂性。直接将映射公开给代码可能会引入竞争条件(类似于WeakMap
不可枚举的原因)。