基本上我想这样做:
x ? console.log("true") : x=55 && console.log("changed!!")
如果x
为false
,它将把值更改为55
和console.log
“ change !!”
答案 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!!"))