4

假设您运行以下代码:

var a = [];
a[4] = true;

然后你的数组看起来像[undefined, undefined, undefined, undefined, true]

但是如果你运行这段代码:

var a = [];
a.splice(4, 0, true);

你会得到[true]而不是,好吧,[undefined, undefined, undefined, undefined, true]

使用 splice 时,如果索引超过数组的当前长度,它只会在最后一个元素处停止。

为什么这是拼接的预期行为?

4

1 回答 1

2

根据 ECMA 文档,'start' 参数不能大于数组的长度或设置为数组的长度。

5 - 让 relativeStart 为 ToInteger(start)。

6 - 如果 relativeStart 为负数,则让 actualStart 为 max((len + relativeStart),0); 否则让actualStart 为min(relativeStart, len)。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.12

至于究竟为什么:我不确定,也许他们认为如果该方法将项目添加到数组中会违反直觉。

于 2013-07-02T23:28:53.367 回答