被省略的数组元素是否会产生自己的属性?

zzz*_*Bov 5 javascript arrays

在JavaScript中使用文字语法定义数组时,可以使用其他逗号省略数组元素:

a = [1, 2, 3];   // 1, 2, 3
b = [1, , 2, 3]; // 1, undefined, 2, 3
Run Code Online (Sandbox Code Playgroud)

我注意到在访问值时,省略的值不是"自己的属性"

b.hasOwnProperty(1); //false
Run Code Online (Sandbox Code Playgroud)

相反,如果您明确设置数组undefined,则将其设置为"自己的属性":

c = [1, undefined, 2, 3];
c.hasOwnProperty(1); //true
Run Code Online (Sandbox Code Playgroud)

是否在规范中定义了如何分配省略的数组元素的行为?如果是这样,哪个规格和哪里?

(可选奖金)是否可靠的跨浏览器,如兼容性表格所证明的?

Ber*_*rgi 3

\n

规范中定义了如何分配省略的数组元素的行为吗?

\n
\n\n

是的。

\n\n
\n

如果是的话,哪个规格

\n
\n\n

ECMAScript 规范。至少在修订版 3、5、5.1 和 6 中是如此。

\n\n
\n

哪里?

\n
\n\n

在数组字面量表达式的语义中,由数组初始值设定项部分给出(ES5ES6)给出。它说

\n\n

[\xe2\x80\xa6] 缺少的数组元素会增加数组的长度并增加后续元素的索引[,但它们]未定义。

\n\n

在计算表达式时,它们会被简单地跳过 - 它们会被计数,但不会在数组实例上创建数据属性,这与创建元素的赋值表达式相反。

\n\n
\n

跨浏览器可靠吗?

\n
\n\n

是的,即使是老的 Internet Explorer 也会这样做。唯一的怪癖是他们将尾随逗号视为省略号,而事实不应该是这样,结果出错了.length

\n