在 JavaScript 中推送后数组的第一个元素未定义

问题描述 投票:0回答:2

如果我声明一个数组然后推送给它,它的长度将是“2”而不是“1”,并且第一个元素将是未定义的。

let myArray = [new Array(2)];
myArray.push(['hi', 'hello']);
alert(myArray[0][0]);

这将是未定义的:

但是,如果我将其更改为

alert(myArray[1][0]);
,它将显示数组的第一个元素。

为什么?

javascript arrays undefined
2个回答
1
投票

在您的代码中,您正在使用单个元素初始化一个数组 myArray,该元素本身就是一个长度为 2 的数组。所以最初,myArray 看起来像这样:

[[undefined, undefined]]

然后,当您调用 myArray.push(['hi', 'hello']) 时,您将向 myArray 添加一个新元素,从而导致:

[[undefined, undefined], ['hi', 'hello']]

所以当你尝试访问myArray[0][0]时,你实际上是在尝试访问数组第一个元素的第一个元素,它是未定义的。但是,当您尝试访问 myArray[1][0] 时,您访问的是数组第二个元素的第一个元素,即“hi”。

要实现您期望的行为,您可以将数组初始化为空数组,然后将新元素推送给它:

let myArray = [];
myArray.push(new Array(2));
myArray.push(['hi', 'hello']);
alert(myArray[0][0]);

这将为您提供未定义的预期输出。


0
投票

鉴于此:

let myArray = [new Array(2)];
myArray.push(['hi', 'hello']);

问题是为什么以下输出未定义:

alert(myArray[0][0]);

答案:

new Array(2)
创建一个包含两个元素的数组,并且两个元素都设置为未定义的值。

let myArray = [];
创建一个新的空数组。

let myArray = [new Array(2)];
创建一个包含一个元素的数组。那一个元素是一个包含两个值未定义的元素的数组。

myArray.push(['hi', 'hello']);
myArray
的末尾添加一个元素。这个元素是一个包含两个元素的数组,“hi”和“hello”。

此时,

myArray
看起来像这样:

let myArray = [
    [undefined, undefined],
    ['hi, 'hello'],
];

所以如果你去

myArray[0]
你得到第一个元素,它是一个数组,然后你去那个数组的第一个元素,它是未定义的。

这就是为什么

alert(myArray[0][0]);
输出未定义。

© www.soinside.com 2019 - 2024. All rights reserved.