【发布时间】:2014-02-17 12:38:33
【问题描述】:
“||”行为的解释是什么运算符(逻辑或),当在 JavaScript 中与 false 和 undefined 一起使用时?
1)
> false || undefined
undefined
2)
> undefined || false
false
【问题讨论】:
标签: javascript undefined logical-operators
“||”行为的解释是什么运算符(逻辑或),当在 JavaScript 中与 false 和 undefined 一起使用时?
1)
> false || undefined
undefined
2)
> undefined || false
false
【问题讨论】:
标签: javascript undefined logical-operators
逻辑OR 运算符不像+、* 等那样可交换。它返回第一个可以转换为true 的表达式。 (来源Mozilla Doc)
在false || undefined中,false不能按定义转换为true(因为正好相反),所以返回第二个操作数(undefined)
【讨论】:
undefined || false 返回undefined 的情况? (原本应该返回false)
根据Logical Operators in Mozilla Docs:
逻辑或 (||)
expr1 || expr2
如果可以转换为true,则返回'expr1';否则,返回 'expr2。
1) 如果false || undefined: false(expr1) 不能转换成true,所以返回undefined(expr2)
2) 万一undefined || false: undefined(expr1) 不能转换成true,所以
false(expr2) 返回
【讨论】:
这个问题与false 和undefined 无关,而是与Javascript 中的Falsy Values 中的任何一个相关。请注意,Javascript 中一共有六个 falsy 值:
当你在两个 Falsy 值之间运行逻辑或运算时,比如 JS 中的<left value> || <right value>,它总是返回 OR 运算符右侧的值。原因是 OR 运算符,根据其在ECMAScript Engines 中的实现,如果可以强制转换为true,通常会返回左值。但是,如果不能将运算符左侧的值强制为 true,则无论右侧的值是什么,都始终返回正确的值,而不是像预期的那样被强制。
【讨论】: