所以我正在玩物体,我注意到对象a = {}
a.b == undefined
是true
a.b === undefined
也是true
然而
a.b === (undefined || 'c')
为false
有谁知道这种行为的原因是什么?
答案 0 :(得分:9)
undefined || 'c'
评估为'c'
,因此a.b === (undefined || 'c')
相当于运行a.b === 'c'
,这显然是错误的。
以下是有关逻辑运算符的MDN文档供参考:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
特别是:
运算符:逻辑OR(||)
用法: expr1 || 表达式2
说明:如果可以转换为true,则返回 expr1 ;否则,返回 expr2 。因此,当与布尔值一起使用时,||如果任一操作数为true,则返回true;如果两者都为假,则返回false。
如果是undefined || 'c'
,则undefined
无法转换为true,因此'c'
运算符会返回||
。
答案 1 :(得分:2)
a.b === (undefined || 'c')
a.b
就像你提到的那样undefined
。
||
或运算符将返回其左侧,如果它是真的;否则它将返回'右侧。
在这种情况下,(undefined || 'c')
评估为'c'
,只留下a.b === 'c'
,这是假的。