ES6 Iterator

57 阅读1分钟
  • Iterator(遍历器、迭代器) 对象需要包含一个next方法

    • 该方法返回一个对象

    • value表示当前结果

    • done表示是否可以继续迭代

let it = makeIterator();

function makeIterator() {
  let nextIndex = 0;
  return {
    next: function() {
      return nextIndex < 5 ?
      {value: nextIndex++, done: false} :
      {value: undefined, done: true};
    }
  };
}

可遍历的(iterable)

  • 如果数据结构的Symbol.iterator属性是一个方法,且该方法返回Iterator对象
interface Iterable {
  [Symbol.iterator]() : Iterator,
}

interface Iterator {
  next(value?: any) : IterationResult,
}

interface IterationResult {
  value: any,
  done: boolean,
}

实例

let obj = {
  [Symbol.iterator]:makeIterator
}

默认调用 Iterator 接口,即Symbol.iterator方法

  • for...of循环

  • 数组解构

  • 扩展运算符

  • yield*

  • 其他隐式调用的地方

    • new Set(['a','b']),Promise.all()

默认为可遍历对象,即默认部署Symbol.iterator属性

  • Array

  • Map

  • Set

  • String

  • 函数的 arguments 对象

  • NodeList 对象