2012-04-03 65 views
2

好吧,所以我在发布之前搜索了一下...没有运气(或者也许我只是愚蠢的)。OOO javascript:对象自引用返回undefined,但控制台显示它存在

我有这个数组我称之为“myArray的”我物体推到它填充一些变量:

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

我的问题是,为什么萤火虫抱怨“最后一个”变量:“遗漏的类型错误:无法读取未定义的的属性'时间'“。如果我做

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

一切都很好。

一个观察我不明白: 我有“.time”引用时该数组为空,但如果我删除它,数组已满。

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

感谢任何指针。

+0

我应该补充一点,我明白,这个数组中的第一个项目将具有“未定义”的“最后”变量,因为它没有任何可引用的地方。 – tim 2012-04-03 23:59:07

+2

您是否检查过“myArray [y.recents.length - 1]”存在并且不是“未定义”? – 0x499602D2 2012-04-03 23:59:27

+0

@tim您在自己的评论中有答案:对于第一个项目'myArray [y.recents.length-1]'是未定义的,而'undefined.time'失败。 – Niko 2012-04-04 00:06:29

回答

4

错误意味着

myArray[y.recents.length-1] 

的评估值不具有time属性的对象,这可能发生当您执行第一push因为数组还没有任何元素。

如果你想隐藏的错误,只是last属性分配给undefined该类别中日月光,你可以添加一个回退值:

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

感谢您的澄清,彼得,我现在明白了。 – tim 2012-04-18 17:27:53

0

myArray[y.recents.length-1]值可以是任何东西(一些字符串,对象,数组,空等)。您可以使用它设置值last,并且不会发生任何错误。但是,如果将属性设置为非对象(如设置time),则会导致错误。

相关问题