无法读取未定义的 属性

cannot read property of undefined

这是我的代码:

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);
}

当我试图将曲目 ID 推入新数组时出现错误,提示无法读取 属性 未定义的曲目(即 newTracks[i])。但相反,当我没有将它推入 newarr 我只是 console.log (newTracks[i].track.id) 时,它工作正常,我得到了所有的 id。正如所见,newTracks 是一个包含 ->track->id 的对象数组。帮助!

您的 for 循环格式不正确:

for(var i=0;newTracks.length;i++){

应该是:

for(var i=0;  i<newTracks.length;  i++){

您的循环版本将超出 newTracks 的范围,因为它只是测试 newTracks 数组是否为空,而事实并非如此(与您增加的次数无关).

因此,当 i == newTrack.length 时,您将寻址一个不存在的数组元素(即 undefined),从而导致出现错误.

如果您只需将 console.log(i, newTrack[i].length, newTrack[i]); 添加为循环中的第一条语句,就可以找出这些类型的问题。然后你看看它是如何越界的...