Javascript: false || undefined vs undefined || false JavaScript:false || undefined 与 undefined || false

4
当在JavaScript中使用逻辑或运算符“||”并将其应用到两个操作数都是false和undefined时,它的行为解释是什么?
1)
> false || undefined
undefined

2)

> undefined || false
false

1
可能是What does the || operator do?的重复问题。 - Stephen
3个回答

15

逻辑运算符 OR(或) 不像 +*等那样满足交换律。它返回第一个可以转换为 true 的表达式。(来源:Mozilla 文档

  1. false || undefined 中,按定义 false 不能被转换为 true(因为它的相反),所以它返回第二个操作数(undefined)。

  2. undefined || false 中,undefined 是一个值,但在 JavaScript 中被视为 false,所以逻辑运算符评估第二个操作数并返回 false(因为两个操作数都是假的)。


1
抱歉,您的第二个语句中是否有拼写错误,或者我没有理解清楚?是否存在这样一种情况:undefined || false 返回 undefined?(原本应该返回 false - Michael Radionov
是的,我写作时混淆了我的想法。我已经修复了这个问题。 - Maxime Lorant

3
这个问题不仅与falseundefined有关,而是与JavaScript中的任何Falsy Values相关。请注意,JavaScript中共有六个falsy值:
  • false。
  • 0(零)
  • ''或""(空字符串)
  • null
  • undefined
  • NaN
当您在两个Falsy值之间运行逻辑OR操作时,例如JS中的<left value> || <right value>,它总是返回OR运算符右侧的值。原因是OR运算符根据其在ECMAScript Engines中的实现,通常在可以强制转换为true的情况下返回左侧的值。但是,如果运算符左侧的值无法强制转换为true,则始终返回右侧的值,而不管右侧的值如何,而不是像人们可能期望的那样进行强制转换。

3
根据Mozilla文档中的逻辑运算符
逻辑或(||) expr1 || expr2 如果能转换为true,则返回'expr1';否则,返回'expr2'。
1)对于false || undefined的情况:无法将false(expr1)转换为true,因此返回undefined(expr2)。
2)对于undefined || false的情况:无法将undefined(expr1)转换为true,因此返回false(expr2)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接