假设您运行此代码:
var a = [];
a[4] = true;
然后你的数组看起来像[undefined, undefined, undefined, undefined, true]
但是如果你运行这段代码:
var a = [];
a.splice(4, 0, true);
您将获得[true]
而不是[undefined, undefined, undefined, undefined, true]
使用splice时,如果索引超过了数组的当前长度,它就会停在最后一个元素上。
为什么这是splice的预期行为?
答案 0 :(得分:1)
根据ECMA文档,'start'参数不能大于数组的长度,或者设置为数组的长度。
5 - 让relativeStart成为ToInteger(开始)。
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
至于为什么:我不确定,也许他们认为如果方法将数据添加到数组中会违反直觉。