【问题标题】:Cannot read property 'undefined' of undefined, but I'm sure the var is valid无法读取未定义的属性“未定义”,但我确定 var 有效
【发布时间】:2013-07-26 23:36:54
【问题描述】:

我正在解析一个 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'
      }
    ]
}

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

【问题讨论】:

  • 变量ismil.playlist.video 都是undefined。将var i 放在更靠近while 循环的位置。 (在解析回调中)
  • 我怎么是未定义的?不是和smil同时声明的吗?
  • 我不知道,i 是全局定义的,所以谁知道它在哪里。运行此回调时为undefined
  • 好点,在让我发帖的那个之后确实引起了另一个错误
  • @dda 感谢您纠正错字

标签: javascript arrays node.js object


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    playlist 是一个数组。

    替换

    smil.playlist.video[i].src
    

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

    【讨论】:

      【解决方案3】:

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

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

      但是,你正在做:

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

      您需要参考playlist索引

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-29
        • 2017-01-05
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 2020-04-06
        • 1970-01-01
        相关资源
        最近更新 更多