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

标签 javascript v8

我想知道 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/

相关文章:

javascript - 如何从 OpenLayers.Control.DrawFeature 获取积分返回

javascript - J2V8是使用android系统V8还是自己编译提供的?

javascript - JSON.stringify() 在 V8 中是确定性的吗?

javascript - 使用复选框隐藏表格行

javascript - jest.mock() - 如何从配置库模拟 config.get()

javascript - 表单元素容器高度

javascript - 如何在 Internet Explorer 中的 HTML 文本输入中隐藏闪烁的光标?

node.js - 如何从 Node.js 应用程序与基于函数的 V8 调试 API 进行对话?

node.js - 无法使用 WebSocket 连接到 node.js 检查器

javascript - nodejs内存不足