【问题标题】:OOO javascript: object self reference returns undefined but console shows it existsOOO javascript:对象自引用返回未定义但控制台显示它存在
【发布时间】:2012-04-17 16:33:01
【问题描述】:

好的,所以我在发帖前做了一些搜索...没有运气(或者我可能只是愚蠢)。

我有一个我称之为“myArray”的数组,我将对象推送到它上面以填充一些变量:

myArray.push({
    time        : (y.moveTime - y.startTime),
    pos         : y.move,
    last        : myArray[y.recents.length-1].time
});

我的问题是为什么 firebug 会抱怨“last”变量:“Uncaught TypeError: Cannot read property 'time' of undefined”。如果我这样做了

last        : myArray[y.recents.length-1]

一切都很好。

我不明白的观察: 当我有“.time”引用时数组是空的,但如果我删除它,数组是满的。

我在这里错过了什么?我不明白 :(

感谢您的任何指点。

【问题讨论】:

  • 我应该补充一点,我确实明白这个数组中的第一个项目将具有“最后一个”变量“未定义”,因为它没有什么可以参考的。
  • 您是否检查过myArray[y.recents.length - 1] 存在而不是undefined
  • @tim 您在自己的评论中有答案:对于第一项 myArray[y.recents.length-1] 未定义,undefined.time 失败。

标签: javascript oop object reference


【解决方案1】:

错误意味着评估值

myArray[y.recents.length-1]

不是具有time 属性的对象。这可能在您执行第一个push 时发生,因为该数组还没有任何元素。

如果您想隐藏错误并在这种情况下将last 属性分配给undefined,您可以添加一个备用值:

last: (myArray[y.recents.length - 1] || {}).time 

【讨论】:

  • 谢谢你的澄清,彼得,我现在明白了。
【解决方案2】:

myArray[y.recents.length-1] 的值可以是任何值(一些字符串、对象、数组、null 等)。你可以用它设置last的值,不会出错。

但是,如果将属性设置为非对象(例如设置time),则会导致错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-09
    • 2011-11-12
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多