JavaScript - 数组"未定义"错误

时间:2015-03-09 00:15:39

标签: javascript arrays loops

我遇到了这个简单的代码问题,我无法弄清楚。 而不是在控制台中打印整个数组,我收到消息“10 undefined”。如果我把“var i”设置为0或者更低,那么这一切都很好,我从该数字到10的完整列表。

当“i”设置为0以上的数字时,为什么不能正常工作? 在chrome中拍摄我的控制台图片,以显示它的外观:

Screenshot

var ar = [];

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

3 个答案:

答案 0 :(得分:7)

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

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

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

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

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

因为数组索引从零开始。当前索引未定义,这就是为什么你得到那些。试试这个:

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