如果我有一个测试大于/小于条件的三元组,然后将该值分配回原始变量,那么它是否有空位?
var firstVar = 1
var secondVar = 2
firstVar = firstVar > secondVar ? firstVar : secondVar
是否有更简单的方法来编写第3行?
我可以使用||
运算符(逻辑OR)来考虑另一种可能的单线快捷方式。
var firstVar = 1;
var secondVar = 2;
firstVar > secondVar || (firstVar = secondVar);
console.log(firstVar);
基本上,第三行上的表达式返回true
,如果第一个操作数被计算为true
(整个表达式将返回“truthy”一般返回第一个操作数中表达式的值)。否则,它将在第二个操作数中返回表达式(在这种情况下返回变量赋值)。但是,整个表达式的返回值不会分配给任何变量,因为如果不满足给定条件(第一个操作数),则目标只是执行特定赋值(第二个操作数)。
此外,此方法可能不像简单的if
语句那样直观,因为只有在第一个操作数中的条件不满足时才会发生变量赋值。它将像else
语句中的变量赋值一样工作,之前的答案是空的if
语句。或者,如果此模式与原始逻辑不匹配,则可以在第一个操作数中反转语句。
注意:第二个操作数中的变量赋值必须在括号中,因为它的优先级低于逻辑OR。如果在构造表达式时不确定运算符的优先级,可能需要在MDN上检查此表。
我将使用一个简单的if
语句,如果条件是true
,它只分配值。
var firstVar = 1;
var secondVar = 2;
if (firstVar <= secondVar) firstVar = secondVar;
console.log(firstVar);