所以我在玩对象,我注意到对象a = {}
a.b == undefined
true
a.b === undefined
也是true
然而 a.b === (undefined || 'c')
false
有谁知道这种行为的原因是什么?
undefined || 'c'
计算结果为'c'
,所以a.b === (undefined || 'c')
等价于运行a.b === 'c'
,这显然是错误的。
以下是有关逻辑运算符的 MDN 文档以供参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
特别:
运算符:逻辑或 (||(
用法: expr1 ||EXPR2
描述:如果可以转换为 true,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时,||如果任一操作数为真,则返回 true;如果两者都为假,则返回假。
在 undefined || 'c'
的情况下,undefined
不能转换为 true,因此'c'
由 ||
运算符返回。
a.b === (undefined || 'c')
a.b
就像你提到的undefined
。
如果为 true,则||
或运算符将返回其左侧;否则它将返回其右侧。
在这种情况下,(undefined || 'c')
计算结果为 'c'
,留下 a.b === 'c'
,这是假的。