Iterator 和 for...of 循环

78 阅读1分钟

概念

遍历器是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作,Iterator 接口主要供for...of消费

遍历过程

1:创建一个指针对象,指向当前数据结构的起始位置。
2:调用指针对象的next()方法,将指针指向数据结构第一个成员,{value:'',done:boolean}
3:value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

模拟next方法返回值

function makeIterator(array) {
  var nextIndex = 0;
  return {
    next: function() {
      return nextIndex < array.length ?
        {value: array[nextIndex++], done: false} :
        {value: undefined, done: true};
    }
  };
}

默认Iterator 接口

ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,具有Symbol.iterator属性,就可以认为是“可遍历的” 原生具备 Iterator 接口的数据结构如下。

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的 arguments 对象
  • NodeList 对象

运用场景

  • 解构赋值 对数组和 Set 结构进行解构赋值时,会默认调用Symbol.iterator方法。
  • 扩展运算符 调用默认的 Iterator 接口。