【发布时间】:2013-07-03 08:06:09
【问题描述】:
假设你运行这段代码:
var a = [];
a[4] = true;
那么你的数组看起来像[undefined, undefined, undefined, undefined, true]
但是如果你运行这段代码:
var a = [];
a.splice(4, 0, true);
你会得到[true] 而不是[undefined, undefined, undefined, undefined, true]
当使用拼接时,如果索引超过了数组的当前长度,它会在最后一个元素处停止。
为什么这是拼接的预期行为?
【问题讨论】:
-
您使用的javascript引擎/浏览器是什么?
-
也许您应该直接联系从事 ECMScript 标准工作的人? Stack Overflow 不一定是获得有关特定语言设计决策的权威答案的最佳场所。
-
@bfuoco:
[4: true]看起来不像一个数组。 -
@bfuoco 试试
var a = []; a.splice(4, 0, true); console.log(a); -
"那么你的数组看起来像
[undefined, undefined, undefined, undefined, true]" - 不完全是。a[4]=true在索引4处添加一个元素并将.length设置为5,但它不会在先前的索引位置添加undefined元素。如果您执行console.log(a),它可能看起来是这样,而a[0]===undefined将是true,但这是因为访问不存在的属性会返回undefined,而不是因为属性存在并且已设置为该值undefined。您可以看到元素0到3实际上并不存在,因为 (0 in a) 是false。
标签: javascript splice