为什么在三元运算符的帮助下进行赋值在 JS 中无法按预期工作?

Why does assignment with help from ternary operator doesn't work as expected in JS?

提问人:Keetch 提问时间:1/12/2022 更新时间:1/12/2022 访问量:66

问:

var a = 0;
var param = 'add';
while(a < 50){
    console.log(a); //prints out values from 0 to 49
    if(param === 'add'){
        a = a + 1;
    }else{
        a = a - 1;
    }
}

虽然非常简单并完成其工作,但我想使此代码更短

while(a < 50){
    console.log(a);
    a = a + (param === 'add')? 1 : -1;
}

但 a 永远不会增长并保持 1.谁能解释这种行为?

JavaScript 条件运 赋值运算符

评论

2赞 luk2302 1/12/2022
a = a + ((param === 'add') ? 1 : -1);
3赞 Teemu 1/12/2022
之前的所有操作都被视为三元的条件部分。?
2赞 Andy 1/12/2022
更短并不等同于更好。您的原始代码更易于阅读。并有效。
0赞 Ivar 1/12/2022
我同意安迪的观点,尽管我会改成 和 .a = a + 1a++a = a - 1a--
1赞 mplungjan 1/12/2022
此外,如果不添加 param,您的循环将永远不会停止 -prints out values from 0 to 49 OR from 0 to -infinity

答:

1赞 www.admiraalit.nl 1/12/2022 #1

表达式的计算结果为

a = (a + (param === 'add')) ? 1 : -1;

归结为

a = 1;

你可以通过写

a = a + ((param === 'add') ? 1 : -1);

甚至更短:

a += (param === 'add') ? 1 : -1;

评论

2赞 Teemu 1/12/2022
为什么不只是..?a += param === 'add' ? 1 : -1;
0赞 www.admiraalit.nl 1/12/2022
当然,我已经将此附加到我的答案中。