是否有可能在ES6上处理2变量if / else条件是否为真?

时间:2018-01-23 10:38:54

标签: javascript if-statement ecmascript-6

假设我有一个像这样的代码

var a, b;
b = 1;
var c = b > 0 ? a = 1 /*and c = 2*/ : a = 0 /*and c = 1*/;
console.log(a + c);

有没有办法用上面的代码制作c = 2a = 1

5 个答案:

答案 0 :(得分:7)

您可以使用括号将表达式包装在三元组内,并使用comma operator返回要分配给c的数字。

var a, b = 1
var c = b > 0 ? (a=1, 2) : (a=0, 1)

console.log(a, c)

使用ES6,您可以使用destructuring assignment将号码分配给ac

const b = 1
const [a, c] = b > 0 ? [1, 2] : [0, 1]

console.log(a, c)

答案 1 :(得分:3)

作为@ Ori Drori答案的替代品,你甚至可以尝试这样的事情:

var b = 1
var a = b > 0 ? 1 : 0;
var c = b + a;

console.log(a, c)

答案 2 :(得分:0)

我会推荐老式的

var a, c, b = 1;
if (b > 0) {
  a = 1;
  c = 2;
} else {
  a = 0
  c = 1;
}
console.log(a + c);

如果您的具体案例允许,您也可以

var a = b > 0 ? 1 : 0;
var c = a + 1;

如果您正在寻找一种方法同时为多个变量分配多个值,那么ES6解构就是解决方案:

var {a, c} = b > 0 ? {a: 1, c: 2} : {a: 0, c: 1};

答案 3 :(得分:0)

另一个技巧是使用下面的代码块

var a,b,c;
b=1;
b > 0 ? ((a=1) && (c = 2)) : ((c = 1) && (a=0));
alert(a + "   " + c);

这是Javascript中代码缩减器使用的方法。此类陈述应与预防措施一起使用。让我解释它是如何工作的

案例b = 1

条件b > 0true。所以第一部分进行了评估。它有2个部分,&&分开。这意味着两个语句都将得到评估,因为第一个语句的计算结果为true(除非第一个状态返回false,这是需要预防措施的地方)。为某个变量赋值会返回相同的值。所以这个测试用例通过了。

案例b = -1

条件b > 0失败。我们再次使用&&连同两个语句,因此两个语句再次得到评估。在这里,您看到我已将a = 0作为第二个陈述。这是因为当我分配a = 0时,它将返回0以及Javascript true = 1false = 0中指定的值。因此,将其作为第一个陈述将导致无价值的第二个陈述。

希望您了解情景和使用情况。

最简单的前瞻性方式是使用前面的答案中提到的逗号运算符

var a,b,c;
b=1;
b > 0 ? (a=1, c = 2) : (a = 0, c = 1);
alert(a + "   " + c);

代码缩减器完全使用&&,技术。

答案 4 :(得分:0)

DRY编码需要;



SELECT DISTINCT DateOfEntry FROM KFC;