gpt4 book ai didi

javascript - for of 在JS中是如何实现的

转载 作者:行者123 更新时间:2023-11-30 11:09:46 25 4
gpt4 key购买 nike

我想知道 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 方法是用这个伪代码实现的:

enter image description here

关于javascript - for of 在JS中是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54171113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com