javascript – elided数组元素是否会产生自己的属性?

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错误.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...