Iterator

172 阅读2分钟

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配合使用。 ③提供了遍历所有数据结构的统一遍历接口。