Javascript:false || undefined vs undefined ||假

时间:2014-01-26 19:09:41

标签: javascript undefined logical-operators

“||”行为的解释是什么运算符(逻辑OR),在JavaScript中与falseundefined一起使用时?

1)

> false || undefined
undefined

2)

> undefined || false
false

3 个答案:

答案 0 :(得分:8)

逻辑OR运算符不像+*等那样可交换。它返回第一个可以转换为true的表达式。 (来源Mozilla Doc

  1. false || undefined中,false无法按定义转换为true(因为它是相反的),因此它返回第二个操作数(undefined

  2. undefined || false中,undefined是一个值,但在Javascript中被视为false,因此逻辑运算符会计算第二个操作数并返回false(因为两个操作数都是假的。

答案 1 :(得分:3)

根据Logical Operators in Mozilla Docs

  

逻辑OR(||)

     

expr1 ||表达式2

     

如果可以转换为true,则返回'expr1';否则,返回'expr2。

1)如果false || undefinedfalse(expr1)无法转换为true,则返回undefined(expr2)

2)如果undefined || falseundefined(expr1)无法转换为true,那么 返回false(expr2)

答案 2 :(得分:3)

这个问题不仅与falseundefined有关,而且与Javascript中的Falsy Values中的任何一个都不相关。请注意,Javascript中总共有六个伪造的值:

  • 错误。
  • 0(零)
  • ''或“”(空字符串)
  • 未定义
  • NaN

当您在两个Falsy值之间运行逻辑“或”运算时,例如JS中的<left value> || <right value>,它总是返回OR运算符右侧的值。原因是,根据其在ECMAScript Engines中的实现,OR运算符通常会返回左值(如果可以将其强制转换为true)。但是,如果不能将运算符左侧的值强制为true,则无论右侧的值是什么,总是返回正确的值,而不是像人们期望的那样强制执行该操作。