遍历器(Iterator)它是一种借口,为各种不同的数据结构提供统一的访问机制。 任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
它的作用有三个:
一是为各种数据结构,提供一个统一的、简便的访问接口;
二是使得数据接口的成员能够按照某种次序排列;
三是ES6创造了一种新的遍历命令for...of
循环,Iterator接口主要提供for...of
消费
遍历过程,创建一个指针对象,调用指针的
next
方法,每调用依次next
方法,就会返回value
和done
两个属性对象,value
属性是当前成员的值,done
属性是一个布尔值,表示循环可以结束
var it = makeIterator(['a','b']);
console.log(it.next());
console.log(it.next());
console.log(it.next());
function makeIterator(array){
var nextIndex = 0;
return {
next: function(){
return nextIndex < array.length ?
{ value: array[nextIndex++],done: false }:
{value:undefined,done: true}
}
}
}
具有原生Iterator接口的数据结构
Array
Map
Set
String
TypedArray
函数的 arguments 对象
NodeList 对象
凡是部署了Symbol.iterator
属性,都称之为部署了遍历器接口,返回一个遍历器对象;对于原生部署了Iterator
接口,for...of
会自动去遍历,如果没有的话(比如对象),都需要自己在Symbol.iterator
属性上面部署
总结: 一个数据结构(数组、Map、Set,某些类似数组的对象——比如arguments对象,DOM NodeList对象,Generator对象,字符串等),才可以被for...of
循环遍历。 换句话说就是for...of
循环内部调用的是数据结构Symbol.iterator
方法
[更多请参考参考阮一峰](http://es6.ruanyifeng.com/#docs/iterator
)
网友评论