假设您运行了以下代码:
var a = [];
a[4] = true;
那么你的数组将会变成 [undefined, undefined, undefined, undefined, true]
但如果你运行以下代码:
var a = [];
a.splice(4, 0, true);
使用splice时,如果索引超过了数组的当前长度,它只会停留在最后一个元素,而不是返回[undefined, undefined, undefined, undefined, true]。
为什么这是splice的预期行为?
[4:true]
看起来不像是一个数组。 - Felix Klingvar a = []; a.splice(4, 0, true); console.log(a);
- Ale Morales[undefined × 4, true]
的结果。http://screencast.com/t/pTLjUYc6 - sissonb[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
。 - nnnnnn