概念
遍历器是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作,Iterator 接口主要供for...of消费
遍历过程
1:创建一个指针对象,指向当前数据结构的起始位置。
2:调用指针对象的next()方法,将指针指向数据结构第一个成员,{value:'',done:boolean}
3:value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。
模拟next方法返回值
function makeIterator(array) {
var nextIndex = 0;
return {
next: function() {
return nextIndex < array.length ?
{value: array[nextIndex++], done: false} :
{value: undefined, done: true};
}
};
}
默认Iterator 接口
ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,具有Symbol.iterator属性,就可以认为是“可遍历的”
原生具备 Iterator 接口的数据结构如下。
- Array
- Map
- Set
- String
- TypedArray
- 函数的 arguments 对象
- NodeList 对象
运用场景
- 解构赋值
对数组和 Set 结构进行解构赋值时,会默认调用
Symbol.iterator方法。 - 扩展运算符 调用默认的 Iterator 接口。