@@(“ at at”)在ES6 JavaScript中是什么意思?

愈伤组织:

我已经@@ 页中注意到有关ES6的新功能,但是我不知道它的确切含义(实际上是语法还是某种文档惯例)。谷歌很难。有人可以解释吗?

澳洲航空94重型:

@@描述所谓的众所周知的符号。(请注意,它实际上不是JS中有效的语法。)根据ES6 / ES2015 1 规范

众所周知的符号是内置的Symbol值,此规范的算法明确引用了这些符号值。它们通常用作属性的键,其值用作规范算法的扩展点。除非另有说明,否则众所周知的符号值由所有代码领域(8.2)共享。

代码领域指的是JavaScript环境的不同实例。例如,根文档的Code Realm与运行在中的JavaScript的Code Realm不同<iframe>

一个对象来自哪个代码领域的问题的一个例子是,当试图instanceof确定一个对象是否为数组时(提示:如果它来自另一个框架,它将无法工作)。为了避免这些问题出现在符号中,它们是共享的,因此@@toString无论对象来自何处,对(say)的引用都将起作用。

其中一些直接通过Symbol构造函数公开,例如,@@toPrimitive公开为Symbol.toPrimitive在尝试将对象转换为原始值时,可以使用该值覆盖产生的值,例如:

let a = { [Symbol.toPrimitive]: () => 1 };
console.log(+a); // 1
console.log(a.valueOf()); // (the same object)
console.log(a.toString()); // "[object Object]"

通常,符号用于在对象上提供唯一的属性,该属性不能与随机属性名称冲突,例如:

let a = Symbol();
let foo = { [a]: 1 };
foo[a]; // 1

除了从某处获取符号之外,没有其他方法可以访问值(尽管您可以通过调用来获取对象的所有符号Object.getOwnPropertySymbols,因此它们不能用于实现私有属性或方法)。

1:请参阅此es-discuss主题,以获取有关不同名称的一些讨论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章