簡體   English   中英

javascript var警報,但使用時未定義

[英]javascript var alerts but when used is undefined

真奇怪 看一下這個:

 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,並提示未定義video [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 ,因此您正在讀取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時,它將失敗。 (當alert(...)嘗試訪問不存在的第4個元素(位置3)時,該故障點將是循環的第4次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM