首页 > 解决方案 > for 循环迭代和省略

问题描述

定义 for-of 迭代包括省略的算法步骤是什么?

const a = [1, , 2];
for(b of a) console.log(b);

我在勇敢者中看到的是:

1
undefined
2

什么解释了这个结果?

标签: javascript

解决方案


算法步骤在此处的语言规范中定义( %ArrayIteratorPrototype%.next)。

当与数组一起使用时,使用存在于 的属性for...of上的迭代器。Symbol.iteratorArray.prototype

此迭代器从索引 0 开始,每次递增 1。如果数组在给定索引处没有属性,则返回undefined该索引。

数组省略不是语言的怪癖,而是一个特性:JavaScript 数组可能是稀疏的。其他一些语言也支持稀疏数组。

请注意,不使用迭代器的枚举方法(例如forEachmapreduce)与稀疏数组的行为不同:它们完全忽略省略号。


推荐阅读