Javascript ES6 - 检查一个符号在全局注册表中是否可用而不创建它

时间:2017-10-19 20:40:08

标签: javascript ecmascript-6 symbols

是否可以检查全局注册中是否有符号?

我的所作所为:

global[Symbol.for('childoftheelderblood')] = true;
//In another file/window/universe
if(!global[Symbol.for('childoftheelderblood')]) console.error('Sorry, but your Ciri is in another universe');

如果并行Universe中没有global,该怎么办?只有符号是跨维度和通用的。我可以以某种方式检查是否已在全局注册表中创建符号,而不像Symbol.for那样实际创建符号。

1 个答案:

答案 0 :(得分:1)

  

是否可以检查全局注册表中是否有符号?

没有。全局注册表中的符号不​​会被创建"它们会从中获取。您可以想象注册表已经包含所有可能的符号 - 当然它们是在实际实现中懒惰地(根据需要)创建的。

全局符号注册表不是通信渠道 1 。它不能变异。它所做的只是提供对公共符号的访问,以便它们可以用作共享对象的属性。

如果您有多个域并且想要在它们之间传递childoftheelderblood = true位,则需要使用环境提供的共享缓冲区,存储或消息传递来明确地执行此操作。

1:如果是,那将是一个巨大的安全漏洞,可以泄漏信息