Javascript 无法读取未定义的属性
这是我的密码:Javascript 无法读取未定义的属性,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,这是我的密码: function makeIframePlayer(newTracks){ var iframe = document.querySelector("iframe"); var iframeSrc="https://embed.spotify.com/?uri=spotify:trackset:PREFEREDTITLE:"; var newarr = new Array(); for(var i=0;newTracks.length;i+
function makeIframePlayer(newTracks){
var iframe = document.querySelector("iframe");
var iframeSrc="https://embed.spotify.com/?uri=spotify:trackset:PREFEREDTITLE:";
var newarr = new Array();
for(var i=0;newTracks.length;i++){
newarr.push(newTracks[i].track.id);
}
iframeSrc += newarr.join();
iframe.src = iframeSrc;
console.log(iframe.src);
}
当我试图将track id放入newarray时,我遇到了一个错误,表示无法读取undefinedi.e的属性track。纽特拉克[i]。但相反,如果不将其放入newarr i just console.log newTracks[i].track.id中,它就可以正常工作,我将获得所有id。如图所示,newTracks是一个包含->轨迹->id的对象数组。帮助 您的for循环格式不正确:
for(var i=0;newTracks.length;i++){
应该是:
for(var i=0; i<newTracks.length; i++){
您的循环版本将超出newtrack的范围,因为它只是测试newtrack数组是否为空,这与增加i的次数无关
因此,当i==newTrack.length时,您将寻址一个不存在的数组元素,该数组元素未定义导致出现错误
如果只添加console.logi,newTrack[i].length,newTrack[i];作为循环中的第一个语句。然后您会看到它是如何运行的超出范围的…在Javascript调试器中对i的值进行简单的检查可以帮助您解决问题。