嗨,我对JS很新。
假设我有一个名为test
的对象,它没有属性missing
。但我尝试访问相同的内容:
test.missing //getting undefined as output
现在我正在尝试访问missing
属性(例如此test.missing.404
),这将为我提供TypeError
。但是我的书说我们可以像这样摆脱这个TypeError
:
test.missing && test.missing.404
现在我的一个大问题是如何针对&&
类型和undefined
类型执行TypeError
。无法猜出Js在这里做了什么。
提前致谢。
答案 0 :(得分:4)
undefined
被视为false
,如果某些内容有价值,则会被视为true
,因此:
//if test.missing is NOT undefined and test.missing.404 is also NOT undefined
if (test.missing && test.missing.404)
答案 1 :(得分:1)
首先,您应该知道JS与许多其他编程语言一样,在比较过程中使用短路技术。因此,在这种情况下,如果第一个条件为假,则无需检查下一个条件。这是因为0 && X
将始终为0。
据说,test.missing && test.missing.404
可以被视为“如果测试对象缺少属性并且(测试对象的)缺失属性具有404属性”则继续。如果测试对象首先没有丢失属性,JS解释器将完全忽略对缺失属性的404属性的检查。
所以关键是以上代码不是&&比较undefined和TypeError,而是首先检查缺少的属性,如果存在第一个属性,则检查404属性。我希望这有道理,广告解释得很好。