一个switch语句中有多个表达式

时间:2016-07-24 20:31:10

标签: javascript switch-statement processing.js

这是我第一次在Javascript中使用switch语句。有没有办法评估一个switch语句的多个条件,如下所示:

var i = 1;
switch(i && random(1)<0.3) {
    case (1):
        //code block
         break;
    case (2):
        //code block
} 

如果两个条件都为真,那么代码块会执行吗?

3 个答案:

答案 0 :(得分:1)

可以用这种方式编写switch语句:

switch (true) {
  case a && b:
    // do smth
    break;
  case a && !b:
    // do other thing
    break;
}

您唯一需要记住的是&amp;&amp;不仅可以返回布尔值,而且可以返回任何其他值,例如'a'(在上面的代码片段中)解析为某个错误值。如果'b'是字符串 - 那么a&amp;&amp; b,如果a为假,则应返回一个字符串 因此,当您使用此模式时,始终确保&amp;&amp;和表达式解析为布尔值。

答案 1 :(得分:0)

您可以这样做,但switch语句将打开您提供的表达式的结果。

假设您的表达式中有逻辑和(&&),则&&的工作原理定义了两种可能的结果。

  1. 如果左手表达式的计算结果为true,则表达式将等于第二部分的评估结果。
  2. 如果左手表达式的计算结果为false,则整个表达式将计算为false。
  3. 您可以在Ecmascript spec

    上阅读有关switch语句的更多信息

答案 2 :(得分:0)

可以做这样的事情:

var i = 1;
switch((i==1) + (Math.random(1)<0.3)*2) {
    case 0:
        //code block when neither is true
         break;
    case 1:
        //code block when only i == 1
         break;
    case 2:
        //code block when only random(1)<0.3
         break;
    case 3:
        //code block when both i==1 and random(1)<0.3
        break;
} 

...但它并不是最好的代码,并且当其中一个测试表达式不是0或1(false或true)时,很容易导致错误。

最好使用if ... else构造来解决这个问题:

var i = 1;
var small = Math.random(1)<0.3;
if (i==1) {
    if (small) {
        //code block when both i==1 and random(1)<0.3
    } else {
        //code block when only i == 1
    }
} else if (small) {
    //code block when only random(1)<0.3
} else {
    //code block when neither is true
}