有人能给我解释一下为什么会这样吗
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
却不起作用。
原文由 Truextacy 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是因为您的变量
i
最终会增加到数组的长度以上。您需要将 for 循环从
i <= data.length
更改为i < data.length
。这将确保
i
变量将始终在数组的范围内。考虑到索引是从零开始的,但是长度会从一开始向上计数,所以长度总是比最高索引多一。