iterator遍历器

Iterator

遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制,即for...of循环,任何数据结构只要部署 Iterator 接口,就可以完成遍历操作

Iterator 的作用:

1>为各种数据结构,提供一个统一的、简便的访问接口

2>使得数据结构的成员能够按某种次序排列

3>Iterator为es6提供的新的遍历命令for .... of ....提供消费

ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable),呐~~可以打印Set看出来啦

具备 Iterator 接口的数据结构有这些:

(1)Array      (2)Map   (3)Set  (4)String  (5)TypedArray  (6)函数的 arguments 对象   (7)NodeList 对象

数组的iterator属性:

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 

不具备iterator接口的数据接口,需要手动部署迭代器。

对于类似数组的对象(存在数值键名和length属性),部署 Iterator 接口,有一个简便方法,就是Symbol.iterator方法直接引用数组的 Iterator 接口。普通对象引用之后不起作用

NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
// 或者
NodeList.prototype[Symbol.iterator] = [][Symbol.iterator];

[...document.querySelectorAll('div')] // 可以执行了

某个数据结构部署了 Iterator 接口,就可以对它使用扩展运算符,将其转为数组。

let arr = [...iterable];

猜你喜欢

转载自blog.csdn.net/weixin_38483133/article/details/88575738