Iterator
1、什么是Iterator遍历器?
Iterator是一种接口,为各种不用的数据结构提供统一的访问机制,任何数据接口只要部署Iterator接口,就可以完成遍历操作。
2、Iterator的作用?
①为各种数据接口提供提议的遍历机制。
②是各种数据接口可以按照某种次序访问。
③提供for...of 消费。
3、Iterator的遍历过程
(1)创建一个指针对象,并指向当前的数据接口的起始位置
(2)第一次调用指针对象next(),可以将指针指向数据数据接口的第一个成员
(3)第二次调用指针对象next(),可以将指针指向数据数据接口的第二个成员。
(4)不断调用指针对象的next(),知道指向数据接口的结束位置。
ES6规定,默认的Iterator的接口部署在数据结构的Symbol,iterator属性,或者说,一个数据接口只要部署看Symbol.iterator属性,就可以认为是“可遍历的”。
4、调用Iterator接口的场合
(1)解构赋值:对数组和Set结构进行解构赋值时。
(2)扩展运算符:只要数据结构部署了Iterator就可以使用扩张运算符
(3)yield*:yield*后面跟着的是一个可遍历的结构,就会调用它的遍历器接口。
(4)任何接口数组作为参数的场合。
5、Iterator对象的方法
(1)next(),移动Iterator对象的指针。(必须部署在遍历器对象)
(2)return(),遍历器遍历过程中,提前退出,会调用遍历器对象的return()。(必须返回一个对象)
(3)throw(),配合Generator函数使用。
6、一个数据接口只要部署了Symbol.iterator属性,就可以被视为是Iterator接口,就可以使用for...of。
传统的遍历语法
(1)for循环
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
(2)forEach
myArray.forEach(function (value) {
console.log(value);
});
(3)for...in
for (var index in myArray) {
console.log(myArray[index]);
}
相对于传统的遍历语法,for...of具有以下优点 ①语法简洁,对象数组都适合使用。 ②不同于forEach,可以和break、continue和return配合使用。 ③提供了遍历所有数据结构的统一遍历接口。