[英]Why is the JavaScript console saying my variable is undefined, even when I defined it two lines before?
[英]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.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]
,这很可能超出了数组范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.