使用和简写如果

时间:2018-10-22 14:40:35

标签: javascript

基本上我想这样做:

x ? console.log("true") : x=55 && console.log("changed!!")

如果xfalse,它将把值更改为55console.log“ change !!”

7 个答案:

答案 0 :(得分:2)

如果我理解正确,那么您基本上想在三元运算符中运行几条指令?

正确的方法是使用括号和逗号:

x ? console.log("true") : (x=55, console.log("changed!!"));

但是,如果您只是测试布尔变量,请使用if语句,这将使您的代码对每个人都更具可读性:

if (x) {
    console.log("true");
}
else {
    x = 55;
    console.log("changed!!");
}

这看起来更自然,更人性化

答案 1 :(得分:1)

由于三元组总是需要返回内容,因此需要将console.log包装在一个函数中。

let x = 0;
return x != 55 ?
return function() {
console.log("true")
} :
return function() {
 console.log("changed!!");
x = 55;
};

答案 2 :(得分:0)

您的代码段是正确的,但是您只需要括号即可。您现在正在做的是:

x ? console.log("true") : x = (55 && console.log("changed!!"))

因此,您要为x的返回值分配console.log

括号足以使行为正确:

x ? console.log("true") : (x=55) && console.log("changed!!")

答案 3 :(得分:0)

在您的示例代码中,assignment operator将计算表达式的整个右手操作数,在本例中为55 && console.log("changed!!")。由于55是真实的,因此它将继续求值console.log,它将始终返回undefined。然后将返回的undefined最终分配给x

var x = false;

x ? console.log("true") : x = 55 && console.log("changed!!");

console.log({x});

您可以使用comma operator并使用parens正确地对命令进行如下所示的分组,以完成所需的操作。

var x = false;

x ? console.log("true") : (x = 55, console.log("changed!!"));

console.log({x});

使用逗号运算符而不是简单地将表达式分组为(x = 55) && console.log("changed!!")的原因是,逗号运算符专门用于此类用例。从MDN的文档中:

  

...如果要在需要单个表达式的位置包含多个表达式,请使用逗号运算符。

最后一点,由于这种情况,三元的结果被舍弃了,因此我不愿意使用ternary作为条件语句的简写。通常认为对于开发人员(包括您自己)而言,将其作为条件语句阅读起来更具可读性,这样他们就可以清楚地知道意图是什么。

if (x) {
  console.log("true");
} else {
  x = 55;
  console.log("changed!!");
}

答案 4 :(得分:0)

您需要一些假体来防止&&的运算符优先于以下表达式。

var x = false;

x ? console.log("true") : (x = 55) && console.log("changed!!")

console.log(x);

答案 5 :(得分:0)

您应该使用||。归因x=55是真实的,因此它永远不会进入您的console.log

答案 6 :(得分:0)

尝试一下

  x? console.log("true") : (x=55, console.log("changed!!"))