Javascript 一个开关箱中是否可能有多个开关箱?
有没有可能做成两层交换机的外壳?假设我有两个表达式,在第一个案例中它寻找第二个表达式?我在谷歌上搜索过,但没有找到我要找的东西Javascript 一个开关箱中是否可能有多个开关箱?,javascript,Javascript,有没有可能做成两层交换机的外壳?假设我有两个表达式,在第一个案例中它寻找第二个表达式?我在谷歌上搜索过,但没有找到我要找的东西 switch (Middle, Direction) { case true: case 'left': code block break; case 'right': code block break; break; case false: case 'left':
switch (Middle, Direction) {
case true:
case 'left':
code block
break;
case 'right':
code block
break;
break;
case false:
case 'left':
code block
break;
case 'right':
code block
break;
break;
default:
code block
}
只需在您的
案例中使用另一个开关
是的,您必须使用单个完整的开关
es:
switch (Middle) {
case true:
switch (Direction) {
case 'left':
//code block
break;
case 'right':
//code block
break;
}
break;
case false:
switch (Direction) {
case 'left':
//code block
break;
case 'right':
//code block
break;
}
break;
default:
//code block
}
注意,在上面,如果方向不是'left'
或'right'
,但是中间的是true
或false
(如果它确实是布尔值,则必须是),则不会运行默认代码,因为从属开关没有默认值
或者,您可以将中间
和方向
组合在一起,这使得在不匹配的情况下更容易使用默认值:
switch (Middle+'|'+Direction) {
case 'true|left':
//code block
break;
case 'true|right':
//code block
break;
case 'false|left':
//code block
break;
case 'false|right':
//code block
break;
default:
//code block
}
或者查看分派对象:
var actions = {
"true|left": function() {
// code for Middle = true, Direction = left
},
"true|right": function() {
// code for Middle = true, Direction = right
},
"false|left": function() {
// code for Middle = false, Direction = left
},
"false|right": function() {
// code for Middle = false, Direction = right
},
"default": function() {
// code for the default
}
};
(actions[Middle+"|"+Direction] || actions.default)();
…虽然在这种特殊情况下,它不会通过开关
为您带来太多东西,但请看一看您不想这样做的原因。您不能只希望新语法存在,但是在任何情况下,您建议的新语法都不会起作用,因为根据标准的开关行为,第一个case true
将变成case'left'
。这将使我的代码的长度增加一倍,看起来比实际情况更复杂。第二层的if状态将使其更短、更美观,而不是在每种情况下使用switch case。你会使用第二个示例而不是在每种情况下使用if语句吗?@Funktiona:我已经这样做了,但很少。如果真的只有上述五种可能性,我可能根本不会使用开关,只要If/else
。