JavaScript 可迭代对象
可迭代对象(Iterables)是可以使用 for..of 进行迭代的对象。
从技术上讲,可迭代对象必须实现 Symbol.iterator 方法。
JavaScript 迭代器
迭代器协议定义了如何从一个对象中生成一系列的值。
当一个对象实现了 next() 方法时,它就成为了一个迭代器。
next() 方法必须返回一个带有两个属性的对象:
- value(下一个值)
- done(true 或 false)
| value | 迭代器返回的值 (如果 done 为 true,则可以省略) | 
| done | 如果迭代器已经完成,则返回 true 如果迭代器产生了一个新值,则返回 false | 
自制的可迭代对象
这个可迭代对象会无限返回:10、20、30、40...... 当每次调用 next() 时:
实例
// 自制的可迭代对象function myNumbers() {  let n = 0;  return {    next: function() {      n += 10;      return {value:n, done:false};    }  };}// 创建可迭代对象const n = myNumbers();n.next(); // Returns 10n.next(); // Returns 20n.next(); // Returns 30注意:自制的可迭代对象存在问题,它不支持 JavaScript 中的 for..of 语句。
JavaScript 中的可迭代对象是具有 Symbol.iterator 属性的对象。
Symbol.iterator 是一个返回 next() 函数的函数。
可以使用以下代码迭代可迭代对象:for (const x of iterable) { }
实例
// 创建对象myNumbers = {};// 使其可迭代myNumbers[Symbol.iterator] = function() {  let n = 0;  done = false;  return {    next() {      n += 10;      if (n == 100) {done = true}      return {value:n, done:done};    }  };}现在您可以使用 for..of 了:
for (const num of myNumbers) {  // 这里可写任何代码}Symbol.iterator 方法会被 for..of 自动调用。
但是我们也可以手动调用它:
实例
let iterator = myNumbers[Symbol.iterator]();while (true) {  const result = iterator.next();  if (result.done) break;  // 这里可写任何代码}