为什么在 JavaScript 中使用 && 运算符防止 TypeError 异常?



假设我有一个变量x声明为:var x.现在,当我尝试访问名为valueofx的属性时,我收到一个类型错误,因为value不存在。现在,如果我在控制台中按原样运行x.value,我将得到一个明确的类型错误异常。但是如果我使用undefined && x.value则不会收到任何类型错误; 返回undefined。所以我推断undefined && non-existing返回undefined.同样,我想像undefined && random786这样的东西也应该返回未定义。但它给出了一个类型错误。所以

为什么undefined && random786- 其中 random786 未在任何地方声明 - 给出类型错误,而undefined && x.value不会给出任何类型错误?

>如果&&左侧的表达式计算结果为undefined(或null0""NaNfalse),则根本不计算右侧。random786(未声明)和x.value"value"不是对象的属性,都不会导致错误。

对于对象属性,对不存在的属性的引用不会导致错误。因此:

if (x.someProperty)

只要x的值是一个对象,就不会引发异常。如果您的代码假设"someProperty">确实存在并且它类似于函数引用,那么您将开始遇到问题:

x.someProperty();

当没有"someProperty"(或者如果它不是一个函数)时,这将引发异常,因此相当常见的习语

x.someProperty && x.someProperty();

最新更新