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

新手上路,请多包涵

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

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

这样如果 两个 条件都为真,代码块就会执行?

原文由 Roman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 780
2 个回答

可以 这样做:

 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(假或真)时,很容易导致错误。

最好使用 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
}

原文由 trincot 发布,翻译遵循 CC BY-SA 3.0 许可协议

可以这样写 switch 语句:

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

您唯一需要记住的是,&& 不仅可以返回布尔值,还可以返回任何其他值,例如,如果“a”(在上面的代码片段中)解析为某个错误值。如果 ‘b’ 是字符串 - 那么 a && b(其中 a 为假)应返回一个字符串。

因此,当您使用此模式时,请始终确保 && 表达式的右侧解析为布尔值。

原文由 Ilya_S 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题