ES6 都有什么 iterator 遍历器

Set、Map

解析

1. Iterator 是什么

遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。

ES6 规定,默认部署了 Iterator 接口的数据结构有:Array、Map、Set、String、TypedArray、函数的 arguments 对象、NodeList。其中重点常用的是 Array、Map、Set。

2. Iterator 的作用

  • 为各种数据结构提供统一的、便捷的访问接口。
  • 让成员能够按某种次序排列。
  • 创造了 for...of 消费接口(消费 Iterator 的数据)。

3. Iterator 的遍历过程

const it = [1, 2, 3][Symbol.iterator]();
it.next(); // { value: 1, done: false }
it.next(); // { value: 2, done: false }
it.next(); // { value: 3, done: false }
it.next(); // { value: undefined, done: true }

for (const v of [10, 20, 30]) {
  console.log(v);  // 10 20 30
}

补充:让普通对象也支持 for...of:

const obj = { a: 1, b: 2, c: 3 };
obj[Symbol.iterator] = function () {
  const keys = Object.keys(this);
  let i = 0;
  return {
    next: () => ({ value: this[keys[i++]], done: i > keys.length }),
  };
};

for (const v of obj) console.log(v); // 1 2 3

来源整理自:vue3js.cn 面试官系列