我想知道 for of
在 JS 中是如何实现的,以及它在幕后是如何工作的。
根据 MDN , for of
在可迭代对象上循环。
我的问题是:对于具有顺序意义的可迭代对象(如数组),它在循环时是否遵循该顺序?这是规范的要求吗?如果我希望元素按特定顺序排列,我可以指望它还是应该使用 for 循环
。
我假设它取决于特定对象(在本例中为数组)对可迭代协议(protocol)的实现,并且 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
方法是用这个伪代码实现的:
关于javascript - for of 在JS中是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54171113/