“||”行为的解释是什么运算符(逻辑OR),在JavaScript中与false
和undefined
一起使用时?
1)
> false || undefined
undefined
2)
> undefined || false
false
答案 0 :(得分:8)
逻辑OR
运算符不像+
,*
等那样可交换。它返回第一个可以转换为true
的表达式。 (来源Mozilla Doc)
在false || undefined
中,false
无法按定义转换为true
(因为它是相反的),因此它返回第二个操作数(undefined
)
在undefined || false
中,undefined
是一个值,但在Javascript中被视为false
,因此逻辑运算符会计算第二个操作数并返回false
(因为两个操作数都是假的。
答案 1 :(得分:3)
根据Logical Operators in Mozilla Docs:
逻辑OR(||)
expr1 ||表达式2
如果可以转换为true,则返回'expr1';否则,返回'expr2。
1)如果false || undefined
:false
(expr1)无法转换为true
,则返回undefined
(expr2)
2)如果undefined || false
:undefined
(expr1)无法转换为true
,那么
返回false
(expr2)
答案 2 :(得分:3)
这个问题不仅与false
和undefined
有关,而且与Javascript中的Falsy Values中的任何一个都不相关。请注意,Javascript中总共有六个伪造的值:
当您在两个Falsy值之间运行逻辑“或”运算时,例如JS中的<left value> || <right value>
,它总是返回OR运算符右侧的值。原因是,根据其在ECMAScript Engines中的实现,OR运算符通常会返回左值(如果可以将其强制转换为true
)。但是,如果不能将运算符左侧的值强制为true,则无论右侧的值是什么,总是返回正确的值,而不是像人们期望的那样强制执行该操作。