Javascript 数组长度行为

标签 javascript

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

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

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

谢谢!

最佳答案

Is this defined behavior?

是的,参见 §15.4 of the spec .

Is doing this recommended?

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

你会经常看到像这样构建的数组:

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 数组 aren't really arrays at all。)您可以将 assign 分配给 length 属性。

关于Javascript 数组长度行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14001187/

相关文章:

javascript - select2 多值只在 POST 中发送一个值

php - 提交后隐藏html表单?

javascript - 为什么将成员添加到 Constructor 函数而不是 Prototype?

javascript - 如果使用 AngularJS 需要相应的表单元素,则用星号标记标签

javascript - 在 IE8 中使用 JavaScript 在元标记后直接将 CSS 链接添加到 HEAD

javascript - 单击一次即可执行多个 php 页面

javascript - "ending statements with semicolon is optional in JavaScript"是什么意思?

javascript - 使用 id 属性作为工具提示的引用或变量

javascript:函数也是对象——对还是错?

javascript - MUI - 如何在悬停时为卡片深度设置动画?