为什么我定义的字符串打印到控制台时未定义?

Why are my defined strings printing to the console as undefined?

我编写了一个非常简单的应用程序,可以从 spotify 播放列表中提取所有曲目。首先,它使用 AJAX 请求获取轨道 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],这很可能超出了数组的范围。