Javascript OR 表达式:return *不是* NaN 的操作数

Javascript OR Expression: return Operand that is *not* NaN

我有一个 OR 表达式,它应该 return 操作数不是 NaN:

(1 || NaN) // evaluates to 1 
(NaN || 1) // evaluates to 1

但是当另一个操作数也是假值时,如0nullundefinedfalse、Javascript return s 总是最右边的操作数:

(0 || NaN) // evaluates to NaN
(NaN || 0) // evaluates to 0
// same for combinations of 0, null, undefined and false

有没有办法将所需的行为 "Return the operand that is not NaN" 放入一个漂亮而简短的表达式中,或者我是否必须依赖 if/else 结构?

使用 if-else 表达式,也称为条件运算符:

!isNaN(a) ? a : b

您可以在表达式末尾添加一个默认值 falsy,例如

result = yourValue0 || yourValue1 || 0;

在这种情况下,您会得到 yourValueXtruthy 值或 last falsy 值。

试试这个:

var notNaN = [value1, value2, value3].find(item => !Number.isNaN(item))

这种运算符使用惰性机制进行计算,这个概念在 javascript 中称为短路。基本上,一旦 JS return 觉得不需要更多的计算来评估这个表达式,它就会立即取值。因此,如果它是一个 && 运算符,它会 return 一旦它找到第一个非真实的(0,“”,null,未定义,NaN)至于 && 运算符,如果任何操作数是非真实的有没有必要检查其余的操作数,因为表达式已经是非真实的,所以它 return 是那个值并退出,现在如果所有操作数都是真实的,它会检查到最后一个并且 return 是最后一个值。对于 ||一旦它找到第一个真值它就恰恰相反 returns 否则一直检查到最后并且 returns 它。