Iterator

Iterator

Iterator(遍历器、迭代器) 是一个对象,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};
    }
  };
}

ES6 规定,如果数据结构的Symbol.iterator属性是一个方法,该方法返回Iterator对象,就可以认为此数据结构是“可遍历的”(iterable)

interface Iterable {
  [Symbol.iterator]() : Iterator,
}

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

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

实例:

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

ES6中以下场合会默认调用 Iterator 接口(即Symbol.iterator方法),

  • for...of循环
  • 数组解构
  • 扩展运算符
  • yield*
  • 其他隐式调用的地方,例如 new Set(['a','b']),Promise.all()

ES6中以下数据结构默认为可遍历对象,即默认部署了Symbol.iterator属性

  • Array
  • Map
  • Set
  • String
  • 函数的 arguments 对象
  • NodeList 对象
原文地址:https://www.cnblogs.com/xm0328/p/14128046.html