【问题标题】:ES 6: Difference between Symbol.iterator and @@iteratorES 6:Symbol.iterator 和 @@iterator 之间的区别
【发布时间】:2015-06-22 14:24:00
【问题描述】:

我想知道使用@@iterator 函数与Symbol.iterator 函数实现迭代器是否有特定区别:

在 MDN 上,Array.prototype.@@iterator 上有一个页面,但在示例本身中,Symbol.iterator 被用作函数名。这只是更新版本,@@iterator 不再有效,还是两者都有效?

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

ECMAScript 2015 (ES6) 规范使用@@iterator 来引用Symbol.iterator。没有@@iterator,无论你在哪里看到它,都读作Symbol.iterator

我认为(更熟悉 ECMAScript 规范的人可能会支持这一点)使用 @@iterator 的原因是因为您需要使用方括号 ([]) 访问对象上的 Symbol 属性,但大多数ES2015 规范(和文档)的部分内容使用了更熟悉的点概念(例如,object.propertyobject["property"]), and so@@somesymbol` 用于保持一致。

参见第 38 页(标记为第 18 页):http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

【讨论】:

    【解决方案2】:

    没有@@iterator 函数。该标记会产生语法错误 - only used in specification 表示特定符号。

    如果您想在代码中使用该符号,例如要访问数组上的迭代器,您必须使用Symbol.iterator。这是Symbol 类的属性,初始化为具有值@@iterator

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 2016-08-20
      • 1970-01-01
      • 2019-08-08
      • 2016-06-27
      • 2012-03-29
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多