一:迭代器
它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
ES6创造了一种新的遍历命令for...of
循环,Iterator接口主要供for...of调用
。
二:创建可迭代对象
一个数据结构只要具有Symbol.iterator
属性,就可以认为是“可遍历的”(iterable)。
Symbol.iterator
属性是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。
遍历器对象中定义了遍历方法:next、return、throw
return
方法的使用场合是,如果for...of
循环提前退出(通常是因为出错,或者有break
语句或continue
语句),就会调用return
方法。如果一个对象在完成遍历前,需要清理或释放资源,就可以部署return
方法。
三:原生的内置了遍历器的数据结构
- Array
- Map
- Set
- String
- TypedArray
- 函数的 arguments 对象
四:遍历方式对比
for...in:for...in
循环可以遍历数组的下标,或对象的属性名。for...in
循环主要是为遍历对象而设计的,不适用于遍历数组。(键遍历)
数组.forEach(func(){todo}):遍历数组成员,中途不能退出
for...of:调用数据结构的迭代器进行迭代,返回的是成员的值。(值遍历)