为什么我定义的字符串打印到控制台时未定义?
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]
,这很可能超出了数组的范围。
我编写了一个非常简单的应用程序,可以从 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]
,这很可能超出了数组的范围。