![](/img/trans.png)
[英]Why is the JavaScript console saying my variable is undefined, even when I defined it two lines before?
[英]Why are my defined strings printing to the console as undefined?
我編寫了一個非常簡單的應用程序,將所有曲目從Spotify播放列表中拉出。 首先,它使用AJAX請求獲取track JSON對象,並將它們放入名為tracks[]
的數組中。
接下來,我遍歷此數組,在每次迭代中,我都為歌曲名稱和每個曲目的藝術家拔出字符串。 我把它們放在一個集中的字符串中。 然后將此字符串存儲在一個名為complete
的新數組中。 這是為每個軌道完成的。
本質上, complete
是一個看起來像
[
"Sympathy for The Devil, The Rolling Stones",
"Come Together, The Beatles",
...
]
在這一點上,我有一個奇怪的問題。 根據chrome的調試器, complete
數組內部具有所有正確的值。 但是,當我嘗試console.log
, complete
任何元素都會以值'undefined'結束。 奇怪的是,如果我用console.log
表達式來獲取兩個字符串並對其進行拼接,它會輸出正確的值。
為什么會發生這種情況以及如何解決它以便可以console.log
正確的值
這是遍歷存儲的JSON對象,將它們存儲在新數組中並打印的代碼:
function print() {
for(var x = 0; x < 4; x++) {
for(var n = 0; n < 100; n++) {
try {
//this logs correct
console.log(tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name);
//these have correct value
var deb = (tracks[x].items[n].track.name + " " + tracks[x].items[n].track.artists[0].name);
complete[z] = deb;
z++;
console.log(deb); //throws no error, prints fine
console.log(complete[z]); //prints undefined
} catch(err) {
//no exception ever thrown
}
}
}
}
我沒有做太多的JS,很抱歉,如果我缺少明顯的東西。
在分配complete[z]
,您就在增加z。 在打印時,您不再訪問complete[z]
,而是訪問尚未定義的complete[z+1]
。 嘗試在console.log
命令后移動增量。
好吧,在上面的示例中,您在數組上設置了值后就增加了z
(我想這是在較早的地方定義的?)。 因此,在數組上設置值時,已將其設置為complete[5]
(或其他值),但是正在記錄complete[6]
,這很可能超出了數組范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.