无法读取属性'未定义'未定义,但I'我确信var是有效的

Cannot read property 'undefined' of undefined, but I'm sure the var is valid

本文关键字:未定义 var 我确信 有效 读取 属性      更新时间:2023-09-26

我正在解析一个smil(xml)文件以获取路径名列表。解析进行得很顺利,并且存储在一个巨大的文本对象中。

但当我试图取回信息时,我只得到:

/home/pi/RaspberryPiTV-master/app.js:158
        Playlist.push(smil.playlist.video[i].src);
                                         ^
TypeError: Cannot read property 'undefined' of undefined
at /home/pi/RaspberryPiTV-master/app.js:158:46
at /home/pi/RaspberryPiTV-master/app.js:321:39
at Object.oncomplete (fs.js:93:15)

代码如下:

var smil={}, i=0;
Playlist=[];
parse("/home/pi/test.smil", function (parsed){
    smil=parsed;
    console.dir(util.inspect(smil, false, null));
    do
    {
        Playlist.push(smil.playlist.video[i].src);
        i=i+1;
    }while(i<smil.playlist.video.length-1);
    ...
}

函数解析(路径名、回调)非常庞大,但由于打印它确实有效,所以它确实有效:

{
  stream:
    [
      { name: 'Stream1' }
    ],
  playlist:
    [
      { video:
        [
          { src: 'L.mp4', start: '5', length: '5' },
          { src: 'SW.mp4', start: '50', length: '5' },
          { src: 'HN.mp4', start: '150', length: '5' }
        ],
        name: 'pl1',
        playOnStream: 'Stream1',
        repeat: 'true',
        scheduled: '2013-07-23 11:00:00'
      }
    ]
}

我是不是错过了什么?我只是不明白为什么我没有定义,因为我确实得到了正确的打印。

playlist是一个数组。

更换

smil.playlist.video[i].src

带有

var index = 0; // or whatever
smil.playlist[index].video[i].src

根据您的JSON,playlist是一个数组:

playlist:
    [ <-- Array declaration
      { ... }
    ]

然而,你正在做:

smil.playlist.video[i].src
-------------^ 

您需要参考playlist索引

这意味着video[i]是未定义的,因此未定义对象上的任何方法都将是不定义的!尝试打印出smil.playlist.