我正在阅读 Javascript:最终参考,它在第93页上说明了:
在极少数情况下,编写这样的代码会很有用 从一个案例标签到下一个,但99%的时间你 应该非常小心地在一个休息的开关内结束每个案例 言。
在什么情况下你会让switch语句落到多个case语句中?
答案 0 :(得分:3)
一个有用的案例是多个值应该具有相同的结果:
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;
}
忘记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}}
}