【问题标题】:Why are my defined strings printing to the console as undefined?为什么我定义的字符串打印到控制台未定义?
【发布时间】:2016-10-07 05:14:29
【问题描述】:

我编写了一个非常简单的应用程序,它可以从 Spotify 播放列表中提取所有曲目。首先,它使用 AJAX 请求获取轨道 JSON 对象,并将它们放入名为 tracks[] 的数组中。

接下来,我遍历这个数组,在每次迭代中,我都会提取出歌曲名称和每首曲目的艺术家的字符串。我把它们放在一个集中的字符串中。然后将该字符串存储在一个名为complete 的新数组中。这是为每个轨道完成的。

本质上,complete 是一个类似于

的数组
[
   "Sympathy for The Devil, The Rolling Stones",
   "Come Together, The Beatles",
   ...
]

此时我有一个奇怪的问题。根据 chrome 的调试器,数组complete 中包含所有正确的值。但是,当我尝试 console.log complete 的任何元素时,我最终会得到值“未定义”。更奇怪的是,如果我使用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 声明为int?
  • @Œlrim 就在脚本的开头,远在调用此函数之前:var complete = new Array(400); 如果这是不正确的,我很抱歉,如果你不能告诉我,我不会做太多的 JS ;)

标签: javascript arrays json undefined spotify


【解决方案1】:

在分配complete[z] 之后,您正在递增 z。打印时,您不再访问complete[z],而是尚未定义的complete[z+1]。尝试在console.log 命令之后移动增量。

【讨论】:

  • 啊哈,会做到的(一个初学者的错误,我很惭愧!)。像往常一样,我不应该在晚上 10:30 编程。还要@relic 感谢您的诚实:D。让我测试一下,我会在几分钟内接受
  • 是的,这就是问题所在。谢谢你。不会让我接受 6 分钟,所以我会在允许的情况下接受。
【解决方案2】:

好吧,在上面的示例中,在设置数组的值之后,您已经增加了 z(我假设之前在某处定义过?)。因此,在数组上设置值时,您已将其设置为 complete[5](或其他),但您正在记录 complete[6],这很可能超出了您的数组范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 2012-05-03
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2016-02-07
    相关资源
    最近更新 更多