令 arr = [1,2,3,4]
。如果我设置 arr[x]
where x >= arr.length
,arr.length
变为 x + 1
.
这发生在 Firefox 和 Chrome 上。我有两个问题:
- 这是定义的行为吗? (欢迎提供来源)
- 是否推荐这样做?
谢谢!
最佳答案
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/