JavaScript中push操作后数组首个元素为undefined的原因
问题原因解析
核心问题出在数组初始化的逻辑上:
首先看初始化代码:
let myArray = [new Array(2)];
这行代码创建了一个包含单个元素的数组,而这个单个元素本身又是一个长度为2的空数组——new Array(2)会生成一个长度为2,但所有位置都未被赋值的数组,访问它的任何索引都会返回undefined。此时myArray的结构是:[ [undefined, undefined] ],长度为1。执行
myArray.push(['hi', 'hello']);后,push方法会把新数组添加到myArray的末尾,此时myArray的长度变为2,结构变成:[ [undefined, undefined], ['hi', 'hello'] ]。
关于两个alert的差异:
alert(myArray[0][0]):访问的是myArray的第一个元素(也就是那个初始化的空数组)的第一个位置,结果自然是undefined。alert(myArray[1][0]):访问的是myArray的第二个元素(你push进去的目标数组)的第一个位置,所以能得到预期的'hi'。
如果你想让myArray初始为空,后续再添加元素,正确写法应该是:
let myArray = []; myArray.push(new Array(2)); myArray.push(['hi', 'hello']);
内容的提问来源于stack exchange,提问作者Aashishkebab
相关产品推荐
相关产品推荐

