用于2个布尔值的javascript开关盒
我有两个布尔值,boolA和boolB。 我想要一个switch case语句,它包含四种可能的组合, i、 例如用于2个布尔值的javascript开关盒,javascript,boolean,switch-statement,boolean-logic,Javascript,Boolean,Switch Statement,Boolean Logic,我有两个布尔值,boolA和boolB。 我想要一个switch case语句,它包含四种可能的组合, i、 例如 switch(boolA boolB){ case 0 0: [do something]; case 0 1: [do something else]; case 1 0: [do another thing]; case 1 1: [do the other thing]; 基本上,我希望switch case将两个布尔值解释为
switch(boolA boolB){
case 0 0:
[do something];
case 0 1:
[do something else];
case 1 0:
[do another thing];
case 1 1:
[do the other thing];
基本上,我希望switch case将两个布尔值解释为一个2位数字
更新:我决定只使用普通的if-else工具。我想我不会这么做 但如果您确实想,可以使用
boolA+“”+boolB
:
switch(boolA + " " + boolB){
case "false false":
[do something];
break;
case "false true":
[do something else];
break;
case "true false":
[do another thing];
break;
default: // "true true"
[do the other thing];
break;
}
switch((10 * boolA) + boolB){
case 0:
[do something];
break;
case 1:
[do something else];
break;
case 10:
[do another thing];
break;
default: // 11
[do the other thing];
break;
}
或者如果你喜欢数字,(10*boolA)+boolB
:
switch(boolA + " " + boolB){
case "false false":
[do something];
break;
case "false true":
[do something else];
break;
case "true false":
[do another thing];
break;
default: // "true true"
[do the other thing];
break;
}
switch((10 * boolA) + boolB){
case 0:
[do something];
break;
case 1:
[do something else];
break;
case 10:
[do another thing];
break;
default: // 11
[do the other thing];
break;
}
规范中保证了这两种隐式转换。文档引用此方法,通过使开关求值true
,然后将逻辑放入开关语句中,来实现您想要的结果
switch (true) { // invariant TRUE instead of variable foo
case a && b:
//logic
break;
case a && !b:
//logic
break;
case !a && b:
//logic
break;
case !a && !b:
//logic
break;
}
我会使用常规的if-else-if逻辑来让事情更清楚。另一种实现方式是根本不使用switch语句。您可以创建一个javascript对象,将布尔值映射为函数对象的键
var truthTable = {
false: {
false: falsefalseFunc,
true: falsetruefunc
},
true: {
false: truefalseFunc,
true: truetrueFunc
}
}
其中FalseFunc、falsetrueFunc等。。。是函数对象。然后你可以这样称呼它:
truthTable[boolA][boolB]();
我决定用
switch(parseInt(boolB.toString()+boolA,2)){
case 0://neither
[do something];
case 1://boolA
[do something else];
case 2://boolB
[do another thing];
case 3://both
[do the other thing];
}
它将布尔值解析为二进制数中的位。ES6备选方案与:
开关(`${+boolA}${+boolB}`){
案例“00”://逻辑
打破
案例“10”://逻辑
打破
案例“01”://逻辑
打破
案例“11”://逻辑
打破
}
这样做的问题是,如果bool是函数调用(想必boolA
和boolB
不是,但在这里进行概括),这些调用会重复进行,直到找到匹配的案例。我甚至在看到MDN上的文档之前都不确定这是可能的,但有一个很好的警告:-)是的,JavaScript的开关
基本上只是if…else if…else if
的语法糖,不像大多数其他语法源自B的语言。在JavaScript中,大小写可以是表达式而不是常量,它们是按源代码顺序计算的(没有跳转表等——当然,如果使用常量,引擎可以自由优化…)。当使用node.js时,由于某种原因,a&&b案例永远不会成立