有人可以举例说明让switch语句使用多个case语句吗?

时间:2012-06-30 22:31:58

标签: javascript

我正在阅读 Javascript:最终参考,它在第93页上说明了:

  

在极少数情况下,编写这样的代码会很有用   从一个案例标签到下一个,但99%的时间你   应该非常小心地在一个休息的开关内结束每个案例   言。

在什么情况下你会让switch语句落到多个case语句中?

4 个答案:

答案 0 :(得分:3)

一个有用的案例是多个值应该具有相同的结果:

switch (value) {
  case 1:
  case 2:
    action1();
    break;
  case 3:
  case 4:
  case 5:
    action2();
    break;
}

空案件会掉到下一个。在这种情况下,混淆的风险很小。

图书作者担心的情况是您合并操作时的情况,例如值2应同时包含action2action3

switch (value) {
  case 1:
    action1();
    break;
  case 2:
    action2();
    // continue with action3
  case 3:
    action3();
    break;
}

忘记break是一个常见的错误,你应该添加上面的评论,以明确说明它是故意遗漏的。

进行比较;在C#中,您不能在break中省略switch,在那里您必须使用goto来指定应继续执行的情况。

答案 1 :(得分:1)

我唯一一次这样做的时候,用户输入首选大写,但小写可以接受:

switch(input){
    case 'a':
        print "Please use uppercase next time";
    case 'A':
        //do stuff here
        break;
}

答案 2 :(得分:0)

当你有多个案例都应该得到相同的代码时,这当然是可以接受的:

switch(val) {
    case "aa":
    case "bb":
        // do you thing here
        break;
}

答案 3 :(得分:0)

我认为这本书应该坚持事实,而不是发布这种建议。请记住,如果前一个case块没有break语句,则会执行下一个break块。这很有用,但也可能令人困惑(即缺少or语句会导致错误)。 使用时它是主观的,但基本上你可以在条件类似于if(myvar == x || myvar == y) { // do A } else if (myvar == w || myvar == z) { // do B } else { // do C } 表达式时使用它:

switch(myvar) {
    case x:
    case y:
        // do A
        break;
    case w:
    case z:
        // do B
        break;
    default:
        // do C
        break;
}

可以改写为:

{{1}}

}