仅当 JavaScript 中的三元运算符中的条件为真时才赋值

Posted

技术标签:

【中文标题】仅当 JavaScript 中的三元运算符中的条件为真时才赋值【英文标题】:Assign only if condition is true in ternary operator in JavaScript 【发布时间】:2013-02-07 04:28:17 【问题描述】:

javascript 中可以做这样的事情吗?

max = (max < b) ? b;

换句话说,仅当条件为真时才赋值。如果条件为假,则什么也不做(不赋值)。这可能吗?

【问题讨论】:

有什么理由避免使用普通的if 语句吗? max = (max 非常老套(max &lt; b)?max = b:0; 【参考方案1】:

那么不要使用ternary operator,它需要第三个参数。如果您不想更改 max,则需要将其重新分配给 max (max = (max &lt; b) ? b : max)。

if-statement 更清晰:

if (max < b) max = b;

如果你需要它是一个表达式,你可以(ab)使用AND的短路评估:

(max < b) && (max = b)

顺便说一句,如果你想避免重复变量名(或表达式?),你可以使用maximum function:

max = Math.max(max, b);

【讨论】:

第二个比第一个快?因为在内存方面,接缝的使用量是一样的。 这个怎么样:max @UtkarshNarainSrivastava 没有为max 分配任何东西,如果行为不同,则性能无关紧要。【参考方案2】:

带有三元运算符的表达式必须同时具有两个值,即对于真假两种情况。

你可以

max = (max < b) ? b : max;

在这种情况下,如果条件为假,max 的值不会改变。

【讨论】:

我很好奇......如果条件为假,在幕后,它会运行一个操作吗?还是会自动替换。 我相信总是有操作:评估条件,然后分配两个不同值之一。当然,eval 本身可能会导致许多操作。【参考方案3】:

如果条件为假,您可以将max 设置为自身。

max = (max < b) ? b : max;

或者您可以尝试使用&amp;&amp; 运算符:

(max < b) && (max = b);

或者为了让您的代码简单,只需使用if

if(max < v) max = b;

【讨论】:

【参考方案4】:

我觉得三元比较合适 试试这个

(max < b) ? max = b : '';

【讨论】:

【参考方案5】:

没有一个特定的运算符不是三元运算符,但你可以这样使用它:

max = (max < b) ? b : max;

【讨论】:

【参考方案6】:

我认为更好的方法可能是

max = Math.max(max, b)

【讨论】:

【参考方案7】:

你可以这样做:

(max < b) ? max = b : ''

【讨论】:

【参考方案8】:

你可以试试:

(max < b) && (max = b);

看看这个例子:

let max = 10;
let b = 15;
(max < b) && (max = b)// this will be true
console.log("max=", max);

let maxx = 10
let bb = 5;
(maxx < bb) && (maxx = bb)// this will be false
console.log("maxx=", maxx);

【讨论】:

短路评估,确实必须是给定问题的较短的 sn-p【参考方案9】:

三元运算符用于我们至少有两种可能的结果。

let no = 10;
let max = 20;

max = no > max ? no : max

如果你只想使用 if 而不是 else,那么我建议你使用 if not 三元运算符。

let no = 10;
let max = 20;
    
if (no > max)
   max = no

如果你想使用三元运算符,但又不想使用 else 部分,那么你可以使用 this,但这并不是对所有问题都有用

let no = 10;
let max = 20;

no > max ? max = no : 0

这里我们只在条件为真时才为 max 变量赋值,否则,我们什么也不做

【讨论】:

【参考方案10】:

没有ES6的例子,我们可以这样使用:

let list = [id: "abc", name: "test1", id: "xyz", name: "test2"]
let selectedData = ;
      list.some((exp) => 
        return (
          exp.id == "xyz" &&
          ((selectedData = exp), true)
        );
      )
console.log(selectedData);

在反对票后添加说明: 只需添加描述来解释我的解决方案。如果您有一组对象,并且您希望只满足一个条件,那么我们可以使用some。当id == "xyz" 时,它将设置selectedData。如问题所述,仅当条件为真时才会赋值,否则 selectedData 将为空。

【讨论】:

【参考方案11】:

您可以使用Logical AND assignment (&&=),而不是三元运算符

基本示例

let output = false;
output &&= true;
console.log(output)

无法重新分配,因为output 已被定义为false

const b = 10;
const max = 1;
let sum = max < b;

sum &&= 'new value';
console.log(sum);

返回一个字符串,因为变量sum已被定义为true

【讨论】:

以上是关于仅当 JavaScript 中的三元运算符中的条件为真时才赋值的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 javascript 中的条件(三元)运算符中获取这两个值?

javascript React - 三元运算符或jsx中的条件包含带反应的html

JavaScript一元运算符二元运算符和三元运算符

java中的条件运算符是啥?

C中的三元(条件)运算符

带有对象的Javascript三元运算符