Symbol.iterator

Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环结构使用。

Symbol.iterator 属性的属性特性:
writable false
enumerable false
configurable false

描述

当需要迭代一个对象的时候(比如在 for...of 循环的开始时),它的 @@iterator 方法就会被调用一次(0 个参数),同时返回的迭代器将被用来获取被迭代出来的值。

一些内建类型拥有默认的迭代器行为,其他类型(如 Object )则没有。下表中的内建类型拥有默认的@@iterator方法:

更多信息请参见迭代器协议

示例

用户自定义迭代器

我们可以像下面这样创建自定义的迭代器:

var myIterable = {}
myIterable[Symbol.iterator] = function* () {
    yield 1;
    yield 2;
    yield 3;
};
[...myIterable] // [1, 2, 3]

不符合标准的迭代器

如果一个迭代器 @@iterator 没有返回一个迭代器对象,那么它就是一个不符合标准的迭代器,这样的迭代器将会在运行期抛出异常,甚至非常诡异的 Bug。

var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

规范

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Symbol.iterator
Standard Initial definition.
ECMAScript 2017 Draft (ECMA-262)
Symbol.iterator
Draft  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 43 36 (36) 未实现 30 10
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 未实现 未实现 36.0 (36) 未实现 未实现 未实现

相关链接

文档标签和贡献者

 此页面的贡献者: Ende93, ziyunfei, Jacksunwei
 最后编辑者: Ende93,