File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -139,6 +139,7 @@ ES6 的有些数据结构原生具备 Iterator 接口(比如数组),即不
139139- String
140140- TypedArray
141141- 函数的 arguments 对象
142+ - NodeList 对象
142143
143144下面的例子是数组的` Symbol.iterator ` 属性。
144145
@@ -156,7 +157,7 @@ iter.next() // { value: undefined, done: true }
156157
157158对于原生部署 Iterator 接口的数据结构,不用自己写遍历器生成函数,` for...of ` 循环会自动遍历它们。除此之外,其他数据结构(主要是对象)的 Iterator 接口,都需要自己在` Symbol.iterator ` 属性上面部署,这样才会被` for...of ` 循环遍历。
158159
159- 对象(Object)之所以没有默认部署 Iterator 接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。本质上,遍历器是一种线性处理,对于任何非线性的数据结构,部署遍历器接口,就等于部署一种线性转换。不过,严格地说,对象部署遍历器接口并不是很必要,因为这时对象实际上被当作Map结构使用 ,ES5 没有 Map 结构,而 ES6 原生提供了。
160+ 对象(Object)之所以没有默认部署 Iterator 接口,是因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定。本质上,遍历器是一种线性处理,对于任何非线性的数据结构,部署遍历器接口,就等于部署一种线性转换。不过,严格地说,对象部署遍历器接口并不是很必要,因为这时对象实际上被当作 Map 结构使用 ,ES5 没有 Map 结构,而 ES6 原生提供了。
160161
161162一个对象如果要具备可被` for...of ` 循环调用的 Iterator 接口,就必须在` Symbol.iterator ` 的属性上部署遍历器生成方法(原型链上的对象具有该方法也可)。
162163
@@ -263,7 +264,9 @@ NodeList.prototype[Symbol.iterator] = [][Symbol.iterator];
263264[... document .querySelectorAll (' div' )] // 可以执行了
264265```
265266
266- 下面是类似数组的对象调用数组的` Symbol.iterator ` 方法的例子。
267+ NodeList 对象是类似数组的对象,本来就具有遍历接口,可以直接遍历。上面代码中,我们将它的遍历接口改成数组的` Symbol.iterator ` 属性,可以看到没有任何影响。
268+
269+ 下面是另一个类似数组的对象调用数组的` Symbol.iterator ` 方法的例子。
267270
268271``` javascript
269272let iterable = {
You can’t perform that action at this time.
0 commit comments