数据集合:Array、Object、Map、Set
Iterator 的作用有三个:
for...of循环,Iterator 接口主要供for...of消费。Iterator 的遍历过程是这样的:
next方法,可以将指针指向数据结构的第一个成员。next方法,指针就指向数据结构的第二个成员。next方法,直到它指向数据结构的结束位置。每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。
var it = makeIterator([‘a‘, ‘b‘]);
it.next() // { value: "a", done: false }
it.next() // { value: "b", done: false }
it.next() // { value: undefined, done: true }
function makeIterator(array) {
var nextIndex = 0;
return {
next: function() {
return nextIndex < array.length ?
{value: array[nextIndex++], done: false} :
{value: undefined, done: true};
}
};
}
ES6规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”
const obj = {
[Symbol.iterator] : function () {
return {
next: function () {
return {
value: 1,
done: true
};
}
};
}
};
具备原生的遍历器接口的数据结构:Array、Map、Set、String、TypedArray、函数Arguments对象、NodeList对象
let arr = [‘a‘, ‘b‘, ‘c‘];
let iter = arr[Symbol.iterator]();
iter.next() // { value: ‘a‘, done: false }
iter.next() // { value: ‘b‘, done: false }
iter.next() // { value: ‘c‘, done: false }
iter.next() // { value: undefined, done: true }
参考文档:http://es6.ruanyifeng.com/#docs/iterator
原文:https://www.cnblogs.com/Mijiujs/p/12286671.html