Javascript var警告,但何时使用是未定义的

javascript var alerts but when used is undefined

本文关键字:未定义 何时使 var 警告 Javascript      更新时间:2023-09-26

这太奇怪了。看看这个:

 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]是未定义的。不知道。

去掉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等于长度之前停止,而不是继续直到i等于长度,因为0索引本质上是添加到循环的总长度上,即3+1。在这个数组上进行4次循环会太多,因此是<而不是<=。你应该在4之前停止,而不是在4之后停止,而是在5之前停止。

另外,缓存Array的长度通常是很好的做法,因为有些浏览器没有优化它。

由于您正在执行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"
}

将for循环中的"<="改为"<"。这应该能解决问题。

问题是数组中只有三个元素。首先用0来处理第一项。这意味着2是最后一个有效索引。当代码试图访问索引3时,它失败了。(当警报(…)试图访问不存在的第4个元素(位置3)时,该故障点将在循环的第4次出现。