数据集合: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