繁体   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