1

arr = [1,2,3,4]. 如果我设置arr[x]where x >= arr.lengtharr.length就会变成x + 1

这发生在 Firefox 和 Chrome 上。我有两个问题:

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

谢谢!

4

3 回答 3

5

这是定义的行为吗?

是的,请参阅规范的 §15.4

推荐这样做吗?

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

你会很常见地看到这样构建的数组:

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

...与以下内容完全相同:

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

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

请注意,JavaScript 数组是稀疏的,它们中可能有间隙,这是造成这种行为的部分原因。(事实上​​,JavaScript 数组根本不是真正的数组。)您可以将 assign 分配给length属性。

于 2012-12-22T08:21:21.883 回答
1

数组索引从零开始。

arr[0] == 1
arr[1] == 2
arr[2] == 3
arr[3] == 4

当您设置arr[4]时,它成为第 5 个元素。

于 2012-12-22T08:18:31.933 回答
0

当然,你可以在 JavaScript 中做到这一点。

  • 该数组将扩展到第 x 个索引,并将您的值放在那里。
  • 数组的长度为 x+1。
  • 从未定义过的索引中的值(在您的情况下为 4 到 x-1)将为undefined.
于 2012-12-22T08:18:51.493 回答