为什么splice不能填充javascript数组上的漏洞

Why does splice not fill the holes on a javascript array?

本文关键字:漏洞 数组 javascript splice 不能 填充 为什么      更新时间:2023-09-26

假设您运行以下代码:

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

那么你的阵列看起来像[undefined, undefined, undefined, undefined, true]

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

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

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

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

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

根据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

至于具体原因:我不确定,也许他们认为如果该方法向数组中添加项会违反直觉。