Javascript数组长度行为

gvl*_*gvl 1 javascript

我们arr = [1,2,3,4].如果我arr[x]在哪里x >= arr.length,arr.length成为x + 1.

这种情况发生在Firefox和Chrome上.我有两个问题:

  1. 这是定义的行为吗?(欢迎来源)
  2. 这是推荐吗?

谢谢!

T.J*_*der 5

这是定义的行为吗?

是的,参见规范§15.4.

这是推荐吗?

这完全取决于你想要的最终结果.这样做没有错.

您会非常常见地看到这样构建的数组:

var a = [];
for (/*...some loop over things...*/) {
    a[a.length] = /* ...something to put on the array... */;
}
Run Code Online (Sandbox Code Playgroud)

......这完全相同:

var a = [];
for (/*...some loop over things...*/) {
    a.push(/* ...something to put on the array... */);
}
Run Code Online (Sandbox Code Playgroud)

一些JavaScript引擎的处理a[a.length] = ...速度比a.push(...)(其他的相反)快.

请注意,JavaScript数组很稀疏,它们可能存在间隙,这是此行为的部分原因.(实际上,JavaScript数组根本不是数组.)您可以为length属性分配赋值.