2012-12-17 52 views
2

嗨,我很新的JS。我怎么能比较JS中的undefined?

可以说我有一个名为test的对象,它没有属性missing。但我尝试访问相同的:

test.missing //getting undefined as output 

现在,我试图访问missing属性(这样test.missing.404),这将给我一个TypeError。但我的书上说,我们可以摆脱这个TypeError的是这样的:

test.missing && test.missing.404 

现在我最大的问题是,如何能够做一个&&undefined类型和TypeError类型。无法猜测Js在这里做什么。

在此先感谢。

回答

4

undefined在JS被视为false如果事情有值,则视为true,所以:你

//if test.missing is NOT undefined and test.missing.404 is also NOT undefined 
if (test.missing && test.missing.404) 
+0

'false','undefined','null','NaN','0'和'“”'是虚假的,其他一切都是真的。我只提到这一点,因为有些人可能会认为''''有“价值”,和/或'[]'没有价值......更容易明确虚假价值,只有6 :) – gnarf

+1

@gnarf quirk:由于历史原因,“document.all”也评估为“false”。 –

+0

愚蠢的历史......;)感谢您的更正。 – gnarf

1

首先应该知道JS像许多其他的编程语言相比,在使用短路的技术。所以在这种情况下,如果第一个条件是错误的,那么就不需要检查下一个条件。这是因为0 && X将始终为0。

这样说,test.missing && test.missing.404可以被认为是“如果测试对象缺少属性,并且(测试对象的)缺少属性具有404属性”,则继续。如果测试对象首先没有缺失属性,那么JS intepreter将完全忽略对缺失属性的404属性的检查。

所以重点是上面的代码不是& &未定义和TypeError的比较,而是首先检查缺失的属性和404属性,如果第一个属性存在。我希望这是很有道理的广告解释。