for of 在JS中是如何实现的

How is for of implemented in JS

我想知道 for of 在 JS 中是如何实现的,以及它在幕后是如何工作的。

根据 MDNfor of 遍历可迭代对象。

我的问题是:对于具有 order 意义的可迭代对象(如数组),它在循环时是否遵守该顺序?这是规范的要求吗?如果我想要特定顺序的元素,我可以指望它还是应该使用 for loop

我假设它取决于特定对象(在本例中为数组)对可迭代协议的实现,并且 for of 只是一个消费者,但最终我无法做到查找有关是否保留顺序的任何具体信息。

顺便说一句,我主要在 Chrome 的 V8 中做了一些测试,似乎在遍历数组时保留了顺序。

for of 是使用迭代器在幕后实现的。

This 是一篇不错的短文,解释了迭代器的工作原理。

这是一个自定义迭代器的示例,可以帮助您了解它的工作原理。您需要实现一个 [Symbol.iterator] 方法:

const iterable = {
 [Symbol.iterator](){
  let index = -1;
  const iter = {
   next(){
    index++;
    if(index === 0)      return {value: 'This is index 0', done: false}
    else if(index === 1) return {value: 'This is index 1!', done: false}
    else if(index === 2) return {value: 'This is index 2!!', done: false}
    else if(index === 3) return {value: 'This is index 3!!!', done: false}

                                return {value: 'end', done: true};
   }
  }

         return iter;
 }
}

const iterator = iterable[Symbol.iterator]();

console.log(iterator.next()); // 0
console.log(iterator.next()); // 1
console.log(iterator.next()); // 2
console.log(iterator.next()); // 3
console.log(iterator.next()); // end

如你所见here,Array迭代器的next方法是用这段伪代码实现的: