ES 6:Symbol.iterator 和@@iterator 的区别
ES 6: Difference between Symbol.iterator and @@iterator
我想知道使用 @@iterator
函数与 Symbol.iterator
函数实现迭代器是否有具体区别:
在 MDN 上,Array.prototype.@@iterator
上有一个页面,但在示例本身中,Symbol.iterator 用作函数名称。这只是更新版本,@@iterator
不再有效,还是两者都有效?
没有@@iterator
函数。该标记会产生语法错误 - 表示特定符号。
如果您想在代码中使用该符号,例如要访问数组上的迭代器,您必须使用 Symbol.iterator
。这是 Symbol
class 的 属性 初始化为具有值 @@iterator
.
ECMAScript 2015 (ES6) 规范使用 @@iterator
引用 Symbol.iterator
。没有@@iterator
,无论你在哪里看到它,都读成Symbol.iterator
。
我认为(更熟悉 ECMAScript 规范的人可能能够支持这一点)使用 @@iterator
的原因是因为您需要使用方括号访问对象的 Symbol 属性([]
),但 ES2015 规范(和文档)的大部分部分使用了更熟悉的点概念(例如 object.property
与 object["property"]), and so
@@somesymbol` 用于保持一致。
见第38页(标记为第18页):http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
我想知道使用 @@iterator
函数与 Symbol.iterator
函数实现迭代器是否有具体区别:
在 MDN 上,Array.prototype.@@iterator
上有一个页面,但在示例本身中,Symbol.iterator 用作函数名称。这只是更新版本,@@iterator
不再有效,还是两者都有效?
没有@@iterator
函数。该标记会产生语法错误 -
如果您想在代码中使用该符号,例如要访问数组上的迭代器,您必须使用 Symbol.iterator
。这是 Symbol
class 的 属性 初始化为具有值 @@iterator
.
ECMAScript 2015 (ES6) 规范使用 @@iterator
引用 Symbol.iterator
。没有@@iterator
,无论你在哪里看到它,都读成Symbol.iterator
。
我认为(更熟悉 ECMAScript 规范的人可能能够支持这一点)使用 @@iterator
的原因是因为您需要使用方括号访问对象的 Symbol 属性([]
),但 ES2015 规范(和文档)的大部分部分使用了更熟悉的点概念(例如 object.property
与 object["property"]), and so
@@somesymbol` 用于保持一致。
见第38页(标记为第18页):http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf