【问题标题】:JavaScript - Array "undefined" errorJavaScript - 数组“未定义”错误
【发布时间】:2015-03-09 00:15:39
【问题描述】:

我对这段简单的代码有疑问,我无法弄清楚。 我没有在控制台中打印整个数组,而是收到消息“10 undefined”。尽管如果我将“var i”设置为 0 或更低,那么一切都很好,我会得到一个从该数字到 10 的完整列表。

为什么当“i”设置为大于 0 的数字时这不起作用? 用 chrome 拍摄我的控制台的照片以显示它的外观:

var ar = [];

for (var i = 1; i <= 10; i++) {
    ar.push(i);
    console.log(ar[i]);
}

【问题讨论】:

  • 您正在推送值i,但当前索引将是i - 1

标签: javascript arrays loops


【解决方案1】:

JavaScript 数组索引从 0 开始,而不是 1。.push() method 在数组末尾添加一个元素,在空数组的情况下(就像你的循环开始时一样)将是数组元素 0。

您的循环在数组索引0 处插入值1,在数组索引1 处插入值2,依此类推,直到在数组索引9 处插入值10

您的每个console.log(ar[i]) 语句都试图从比最高元素索引高一的索引中记录一个值,而这些元素将始终为undefined。所以控制台记录了值undefined 十次。

您可以像这样记录数组的最后一个元素:

console.log(ar[ar.length-1]);

或者在您(现在)知道i 将比.push() 使用的索引高一的情况下:

console.log(ar[i-1]);

【讨论】:

  • 需要注意的是,未定义的错误是最后一个索引引起的
  • undefined 不是错误,只是每次ar[i] 都不是定义的元素。
【解决方案2】:

“10 undefined”表示控制台显示“undefined”10次。

正如 thefourtheye 在他的评论中所说,您正在推送值 i,但您刚刚推送到数组末尾的元素的索引是 i - 1。这意味着每次您console.log(ar[i]) 时,您都在记录尚未定义的内容。

这都是因为数组中的第一个元素是 ar[0],而不是 ar[1]。您可以通过像这样记录来解决您的问题:console.log(ar[ i - 1 ]);

【讨论】:

    【解决方案3】:

    因为数组索引从零开始。当前索引未定义,这就是您获得这些索引的原因。试试这个:

    var ar = [];
    for(var i = 1;i <= 10;i++){
       ar.push(i);
       console.log(ar[i-1]);
    }
    

    【讨论】:

    • 我在那里使用 1 作为初始值,因为我认为您想在控制台中打印 1 - 10。不管怎样,你现在应该明白了。
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2012-05-11
    相关资源
    最近更新 更多