ES6中能否按if/else条件处理双变量?给定代码能否实现a=1且c=2?
在ES6中根据条件同时修改多个变量的实现方法
当然可以实现你想要的效果!不过你当前的代码写法存在小问题,咱们先拆解一下问题,再给出几种可行的解决方案~
先分析你现有代码的问题
你原来的代码里,三元运算符的逻辑是把a = 1或a = 0的结果赋值给c,但赋值表达式的返回值是被赋的值,所以当b>0时,c会被赋值为1(也就是a=1的返回值),而不是你期望的2,最终a+c会得到2,达不到预期的3。
解决方案1:使用逗号运算符
逗号运算符可以让你在一个表达式里执行多个操作,最终返回最后一个表达式的值。我们可以利用这个特性,同时完成a的赋值和c的取值:
var a, b; b = 1; var c = b > 0 ? (a = 1, 2) : (a = 0, 1); console.log(a + c); // 输出3,也就是1+2的结果
这里的(a = 1, 2)会先执行a=1,然后把2作为整个表达式的返回值赋值给c,完美实现你的需求。
解决方案2:使用对象解构赋值(ES6特性)
如果需要同时赋值的变量更多,用解构赋值的可读性会更强,一眼就能看清不同条件下各变量的取值:
let a, b, c; b = 1; // 注意解构赋值作为单独语句时,必须加外层括号 ({ a, c } = b > 0 ? { a: 1, c: 2 } : { a: 0, c: 1 }); console.log(a + c); // 输出3
这种方式更符合ES6的语法风格,逻辑也更清晰。
解决方案3:直接用if/else(最直观)
如果逻辑不算特别简单,其实直接用if/else反而更容易理解,后续维护起来也更方便:
let a, b, c; b = 1; if (b > 0) { a = 1; c = 2; } else { a = 0; c = 1; } console.log(a + c); // 输出3
总结
如果一定要用三元运算符实现,逗号运算符或解构赋值都可以满足需求;如果追求代码可读性,if/else是更稳妥的选择。
内容的提问来源于stack exchange,提问作者flix
相关产品推荐
相关产品推荐

