我有一个这样的开关语句:
switch(a) {
case 0:
// do something
break;
case 1:
// do something else
break;
}
我想要做的是在a == 2
时执行两个代码块。我想写这样的东西:
switch(a) {
case 0:
case 2:
// do something
break;
case 1:
case 2:
// do something else
break;
}
但显然这不起作用,因为第一个break语句结束了整个switch语句。
我能想到的唯一方法就是编写辅助函数:
function case0() {
// do something
}
function case1() {
// do something else
}
switch(a) {
case 0:
case0();
break;
case 1:
case1();
break;
case 2:
case0();
case1();
break;
}
这个解决方案对我来说似乎有点冗长和丑陋。有没有更好的方法来实现我想要的目标?
答案 0 :(得分:2)
在switch
语句中,代码从第一个真实条件开始执行到最近的break
。因此,在您的情况下,构建可能会有效。
var a = 2;//1;//0;//-1;
switch(a){
case 2: //and also one and zero
console.log('two');
case 1: //and also zero
console.log('one');
case 0: //zero only
console.log('zero');
break;
default: //no matches
console.log('default');
}
答案 1 :(得分:0)
你问是否有更好的方式来实现你想要的......
那么,我的解决方案是否合格取决于你对“更好”的定义,但无论如何它都在这里:
你可以像这样制作你的开关语句:
switch(a) {
case 0:
caseHandler([0]);
break;
case 1:
caseHandler([1]);
break;
case 2:
caseHandler([0,1]);
break;
}
并将一组值传递给使用另一个开关的单个辅助函数:
function caseHandler(values) {
for (var i = 0; i < values.length; i++) {
switch (values[i]) {
case 0:
console.log('doing zero stuff');
break;
case 1:
console.log('doing one stuff');
break;
}
}
}