假设我有一个变量x
声明为:var x
.现在,当我尝试访问名为value
ofx
的属性时,我收到一个类型错误,因为value
不存在。现在,如果我在控制台中按原样运行x.value
,我将得到一个明确的类型错误异常。但是如果我使用undefined && x.value
则不会收到任何类型错误; 返回undefined
。所以我推断undefined && non-existing
返回undefined
.同样,我想像undefined && random786
这样的东西也应该返回未定义。但它给出了一个类型错误。所以
为什么
undefined && random786
- 其中 random786 未在任何地方声明 - 给出类型错误,而undefined && x.value
不会给出任何类型错误?
>如果&&
左侧的表达式计算结果为undefined
(或null
、0
、""
、NaN
或false
),则根本不计算右侧。random786
(未声明)和x.value
"value"不是对象的属性,都不会导致错误。
对于对象属性,对不存在的属性的引用不会导致错误。因此:
if (x.someProperty)
只要x
的值是一个对象,就不会引发异常。如果您的代码假设"someProperty">确实存在并且它类似于函数引用,那么您将开始遇到问题:
x.someProperty();
当没有"someProperty"(或者如果它不是一个函数)时,这将引发异常,因此相当常见的习语
x.someProperty && x.someProperty();