簡體   English   中英

為什么我定義的字符串以未定義的形式打印到控制台?

[英]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.logcomplete任何元素都會以值'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.

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