我正在阅读Javascript: the Definitive Reference,它在第 93 页上说:
在极少数情况下,编写这样的从一个 case 标签到下一个 case 标签的代码很有用,但 99% 的情况下,您应该非常小心地使用 break 语句结束 switch 中的每个 case。
在什么情况下你会让一个 switch 语句落入多个 case 语句?
我正在阅读Javascript: the Definitive Reference,它在第 93 页上说:
在极少数情况下,编写这样的从一个 case 标签到下一个 case 标签的代码很有用,但 99% 的情况下,您应该非常小心地使用 break 语句结束 switch 中的每个 case。
在什么情况下你会让一个 switch 语句落入多个 case 语句?
一种有用的情况是多个值应该具有相同的结果:
switch (value) {
case 1:
case 2:
action1();
break;
case 3:
case 4:
case 5:
action2();
break;
}
空箱子会掉到下一个。在这种情况下,混淆的风险很小。
本书作者担心的情况是当您组合操作时,例如值2
应该同时具有action2
和action3
:
switch (value) {
case 1:
action1();
break;
case 2:
action2();
// continue with action3
case 3:
action3();
break;
}
忘记 abreak
是一个很常见的错误,你应该像上面一样添加评论,以明确它是故意遗漏的。
为了比较;在 C# 中,您不能只省略 abreak
中的 a switch
,您必须使用 agoto
来指定应继续执行的情况。
我做过的唯一一次是用户输入首选大写字母,但可接受小写字母:
switch(input){
case 'a':
print "Please use uppercase next time";
case 'A':
//do stuff here
break;
}
当您有多个案例都应该获得相同的代码时,这当然是可以接受的:
switch(val) {
case "aa":
case "bb":
// do you thing here
break;
}
我认为这本书应该坚持事实而不是发布这种推荐。请记住,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;
}
}