假设您运行此代码:
var a = [];
a[4] = true;
然后你的数组看起来像[undefined,undefined,undefined,undefined,true]
但是如果你运行这段代码:
var a = [];
a.splice(4, 0, true);
你会得到[true]而不是,[未定义,未定义,未定义,未定义,真]
使用splice时,如果索引超过了数组的当前长度,它就会停在最后一个元素处.
为什么这是拼接的预期行为?
解决方法:
根据ECMA文档,’start’参数不能大于数组的长度,或者它设置为数组的长度.
5 – Let relativeStart be ToInteger(start).
6 – If relativeStart is negative, let actualStart be max((len + relativeStart),0); else let actualStart be min(relativeStart, len).
http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.12
至于为什么到底:我不确定,也许他们认为如果方法将项添加到数组中会违反直觉.