有人可以向我解释为什么会这样做
itemIds = [];
for (var i = 0; i <= data.length; i++) {
itemIds.push(data[0].item);
}
console.log(itemIds); // outputs as expected, the same thing, data.length times
但这不起作用(唯一的变化是将i
添加到push()
)
itemIds = [];
for (var i = 0; i <= data.length; i++) {
itemIds.push(data[i].item);
}
console.log(itemIds); // TypeError: Cannot read property 'item' of undefined
我需要这样做,因为此示例中的data
来自角度$http
调用,并返回一个对象。我不明白为什么静态放入0作品,但试图让它遍历每个data.item
不会。
答案 0 :(得分:3)
这是因为你的变量i
最终将增加到数组的长度之上。
您需要将for循环从i <= data.length
更改为i < data.length
。
这将确保i
变量始终位于数组的范围内。
考虑到索引是从零开始的,但是长度将从1开始计算,长度总是比最高索引多一个。
答案 1 :(得分:3)
这是我的虚拟解释。
i
永远不能等于data.lenght
例如:
var data = ['Bob', 'John', 'Mike'];
data[0] = Bob
data[1] = John
data[2] = Mike
data[3] = ?
因此data[3]
不能等于data.length = 3
,它会从0开始循环。
希望对新手有所帮助。
答案 2 :(得分:2)
只是说明出了什么问题
basket = ['milk', 'egg', 'chees']
for (var i = 0; i <= basket.length; i++) {
console.log('loop ' + i, basket[i])
}
/*
Logs:
loop 0 milk
loop 1 egg
loop 2 chees
loop 3 undefined
*/
答案 3 :(得分:1)
更改
for (var i = 0; i <= data.length; i++)
到
for (var i = 0; i < data.length; i++)
答案 4 :(得分:1)
basket = ['milk', 'egg', 'chees']
var x = "";
for (var i = 0; i <= basket.length; i++) {
x = 'loop ' + i, basket[i];
console.log(x);
}
希望能解决问题。 '循环' + 我,篮子[i]; -- 如果未使用变量声明并且变量必须具有空内容,则本身会创建一个空的未识别元素,例如 var x = "";