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
但是当另一个操作数也是假值时,如0
、null
、undefined
或false
、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;
在这种情况下,您会得到 yourValueX
的 truthy 值或 last falsy 值。
试试这个:
var notNaN = [value1, value2, value3].find(item => !Number.isNaN(item))
这种运算符使用惰性机制进行计算,这个概念在 javascript 中称为短路。基本上,一旦 JS return 觉得不需要更多的计算来评估这个表达式,它就会立即取值。因此,如果它是一个 && 运算符,它会 return 一旦它找到第一个非真实的(0,“”,null,未定义,NaN)至于 && 运算符,如果任何操作数是非真实的有没有必要检查其余的操作数,因为表达式已经是非真实的,所以它 return 是那个值并退出,现在如果所有操作数都是真实的,它会检查到最后一个并且 return 是最后一个值。对于 ||一旦它找到第一个真值它就恰恰相反 returns 否则一直检查到最后并且 returns 它。
我有一个 OR 表达式,它应该 return 操作数不是 NaN
:
(1 || NaN) // evaluates to 1
(NaN || 1) // evaluates to 1
但是当另一个操作数也是假值时,如0
、null
、undefined
或false
、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;
在这种情况下,您会得到 yourValueX
的 truthy 值或 last falsy 值。
试试这个:
var notNaN = [value1, value2, value3].find(item => !Number.isNaN(item))
这种运算符使用惰性机制进行计算,这个概念在 javascript 中称为短路。基本上,一旦 JS return 觉得不需要更多的计算来评估这个表达式,它就会立即取值。因此,如果它是一个 && 运算符,它会 return 一旦它找到第一个非真实的(0,“”,null,未定义,NaN)至于 && 运算符,如果任何操作数是非真实的有没有必要检查其余的操作数,因为表达式已经是非真实的,所以它 return 是那个值并退出,现在如果所有操作数都是真实的,它会检查到最后一个并且 return 是最后一个值。对于 ||一旦它找到第一个真值它就恰恰相反 returns 否则一直检查到最后并且 returns 它。