迭代协议是 ES6 新增的,迭代协议不是内置的实现或者语法,而是一个协议

迭代协议分为:可迭代协议和迭代器协议。

可迭代协议

可迭代协议允许 JavaScript 对象定义或定制它们的迭代行为。要成为可迭代对象,一个对象必须实现 @@iterator 方法。意味着对象或者原型链上必须有一个 @@iterator 属性,可以通过常量 Symbol.iterator 访问该属性。

[Symbol.iterator] : 一个没有参数的函数,返回一个迭代器对象

当一个对象被迭代时,它的 @@iterator 方法会被调用,然后使用返回的迭代器去迭代。

迭代器协议

迭代器协议定义了一个标准的方式去产生一系列的值。

一个对象必须具有符合条件 next() 方法才是一个迭代器。

  • done(boolean) 迭代器还可以继续产生下一个值,则表示未迭代完毕,返回 false。如果一个迭代器迭代完毕,返回 true。
  • value 迭代器返回一个 JavaScript 值。done 为 true 可以省略。

迭代器例子

一个标准的迭代器实现:

const myIterator = {
  next: function() { ... },
  [Symbol.iterator]: function() {
    return this;
  }
}

一个简易的迭代器:

function makeIterator(array) {
  let nextIndex = 0;
  return {
  }
}

参考链接