2

嗨,我对 JS 很陌生。

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

test.missing //getting undefined as output

现在我正在尝试访问missing属性(像这样test.missing.404),这会给我一个TypeError. 但是我的书说我们可以这样摆脱TypeError它:

test.missing && test.missing.404

现在我的大问题是如何&&针对undefined类型和TypeError类型进行操作。无法猜测 Js 在这里做什么。

提前致谢。

4

2 回答 2

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)
于 2012-12-17T09:19:36.020 回答
1

首先你应该知道,JS 像许多其他编程语言一样在比较过程中使用短路技术。因此,在这种情况下,如果第一个条件为假,则无需检查下一个条件。这是因为0 && X 总是会导致 0 。

话虽如此,test.missing && test.missing.404可以理解为“如果测试对象缺少属性并且(测试对象的)缺少属性具有 404 属性”然后继续。如果测试对象首先没有缺失属性,那么 JS 解释器将完全忽略对缺失属性的 404 属性检查。

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

于 2012-12-17T09:29:10.337 回答