我遇到了这个简单的代码问题,我无法弄清楚。 而不是在控制台中打印整个数组,我收到消息“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]);
}
答案 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]);
}