这很奇怪。看看这个:
for( var i = 0; i <= videos.length; i ++ ){
alert(videos[i].id); // this works and alerts the correct number
var foo = videos[i].id; // firebug says "videos[i] is undefined"
}
共有3个视频。在FF中,这会警告所有3个视频ID,然后无法说视频[i]未定义。根本没有想法。
答案 0 :(得分:5)
摆脱=
循环条件中的for
。
for( var i = 0; i < videos.length; i ++ ){
...
}
使用<=
,您将迭代到索引,该索引大于Array
的实际索引值,因此您将迭代返回undefined
的无效索引。
例如......
如果您有array('A','B','C')
,则长度为3
。现在,如果你迭代到3 <= i
,并包含0
,因为数组以Javascript开头,你实际上将循环4次,而不是3次。
A
的索引值为0
,而不是1
,因此您需要在i
等于长度之前停止,直到{{1}为止}等于长度,因为i
索引基本上被添加到循环的总长度,意味着3 + 1。此数组上的4个循环太多,因此0
而不是<
。你想在4之前停止,而不是在4之后但在5之前停止。
此外,通常优先考虑缓存<=
的长度,因为某些浏览器不对其进行优化。
答案 1 :(得分:1)
由于您正在执行i <= videos.length
,因此您正在读取videos
数组末尾的内容。 Javascript数组是零索引的,因此您通常希望迭代长度为-1。
相反,请尝试:
for( var i = 0; i < videos.length; i ++ ){
alert(videos[i].id); // this works and alerts the correct number
var foo = videos[i].id; // firebug says "videos[i] is undefined"
}
答案 2 :(得分:1)
将“&lt; =”更改为“&lt;”在for循环中。它应该解决问题。
问题是数组中只有三个项目。首先用0解决第一个项目。这意味着2是最后一个有效索引。当代码尝试访问索引3时,它会失败。 (当警报(...)试图访问不存在的第4个元素(位置3)时,该失败点将在循环的第4次。