在JavaScript中使用文字语法定义数组时,可以使用其他逗号省略数组元素:
a = [1,2,3]; // 1,3
b = [1,3]; // 1,undefined,3
我注意到在访问值时,省略的值不是“自己的属性”
b.hasOwnProperty(1); //false
相反,如果您定义一个显式设置undefined的数组,它将被设置为“自己的属性”:
c = [1,3];
c.hasOwnProperty(1); //true
是否在规范中定义了如何分配省略的数组元素的行为?如果是这样,哪个规格和哪里?
(可选奖金)是否可靠的跨浏览器,如兼容性表格所证明的?
最佳答案
Is the behavior for how omitted array elements are assigned defined in a spec?
是.
If so,which spec
ECMAScript规范.至少在修订版3,5,5.1和6中.
and where?
在数组文字表达式的语义中,由Array Initializer部分(ES5,ES6)给出.它说
[…]缺少的数组元素有助于数组的长度,并增加后续元素的索引[,但它们没有定义.
在表达式的求值中,它们被简单地跳过 – 它们被计算但不在数组实例上创建数据属性,这与创建元素的赋值表达式相反.
Is it reliable cross-browser?
是的,即使是旧的Internet Explorers也可以.唯一的怪癖是they count a trailing comma as an elision,它应该不是,并且得到.length错误.