0

我正在阅读Javascript: the Definitive Reference,它在第 93 页上说:

在极少数情况下,编写这样的从一个 case 标签到下一个 case 标签的代码很有用,但 99% 的情况下,您应该非常小心地使用 break 语句结束 switch 中的每个 case。

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

4

4 回答 4

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;
}

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

为了比较;在 C# 中,您不能只省略 abreak中的 a switch,您必须使用 agoto来指定应继续执行的情况。

于 2012-06-30T22:38:42.810 回答
1

我做过的唯一一次是用户输入首选大写字母,但可接受小写字母:

switch(input){
    case 'a':
        print "Please use uppercase next time";
    case 'A':
        //do stuff here
        break;
}
于 2012-06-30T22:37:25.767 回答
0

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

switch(val) {
    case "aa":
    case "bb":
        // do you thing here
        break;
}
于 2012-06-30T22:39:35.380 回答
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;
}

}

于 2012-06-30T22:43:32.043 回答