为什么拼接不能填充javascript数组上的漏洞?

假设您运行此代码:

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

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

上一篇:linux-有关epoll和拼接的问题


下一篇:splice、slice、substring、substr的区别