当三元测试大于/小于条件时,速记是什么?

问题描述 投票:0回答:2

如果我有一个测试大于/小于条件的三元组,然后将该值分配回原始变量,那么它是否有空位?

var firstVar = 1
var secondVar = 2
firstVar = firstVar > secondVar ? firstVar : secondVar

是否有更简单的方法来编写第3行?

javascript ternary-operator
2个回答
1
投票

我可以使用||运算符(逻辑OR)来考虑另一种可能的单线快捷方式。

var firstVar = 1;
var secondVar = 2;
firstVar > secondVar || (firstVar = secondVar);
console.log(firstVar);

基本上,第三行上的表达式返回true,如果第一个操作数被计算为true(整个表达式将返回“truthy”一般返回第一个操作数中表达式的值)。否则,它将在第二个操作数中返回表达式(在这种情况下返回变量赋值)。但是,整个表达式的返回值不会分配给任何变量,因为如果不满足给定条件(第一个操作数),则目标只是执行特定赋值(第二个操作数)。

此外,此方法可能不像简单的if语句那样直观,因为只有在第一个操作数中的条件不满足时才会发生变量赋值。它将像else语句中的变量赋值一样工作,之前的答案是空的if语句。或者,如果此模式与原始逻辑不匹配,则可以在第一个操作数中反转语句。

注意:第二个操作数中的变量赋值必须在括号中,因为它的优先级低于逻辑OR。如果在构造表达式时不确定运算符的优先级,可能需要在MDN上检查此表。


2
投票

我将使用一个简单的if语句,如果条件是true,它只分配值。

var firstVar = 1;
var secondVar = 2;
if (firstVar <= secondVar) firstVar = secondVar;
console.log(firstVar);
© www.soinside.com 2019 - 2024. All rights reserved.