Iterator
Iterator
Iterator
(遍历器、迭代器) 是一个对象,Iterator
对象需要包含一个next
方法,该方法返回一个对象,此对象有两个属性,一个value
表示当前结果,一个done
表示是否可以继续迭代
let it = makeIterator();
function makeIterator() {
let nextIndex = 0;
return {
next: function() {
return nextIndex < 5 ?
{value: nextIndex++, done: false} :
{value: undefined, done: true};
}
};
}
ES6 规定,如果数据结构的Symbol.iterator
属性是一个方法,该方法返回Iterator
对象,就可以认为此数据结构是“可遍历的”(iterable)
interface Iterable {
[Symbol.iterator]() : Iterator,
}
interface Iterator {
next(value?: any) : IterationResult,
}
interface IterationResult {
value: any,
done: boolean,
}
实例:
let obj = {
[Symbol.iterator]:makeIterator
}
ES6中以下场合会默认调用 Iterator
接口(即Symbol.iterator
方法),
for...of
循环- 数组解构
- 扩展运算符
yield*
- 其他隐式调用的地方,例如
new Set(['a','b'])
,Promise.all()
等
ES6中以下数据结构默认为可遍历对象,即默认部署了Symbol.iterator
属性
- Array
- Map
- Set
- String
- 函数的 arguments 对象
- NodeList 对象