javascript switch-case for 2 booleans

时间:2015-01-20 17:26:54

标签: javascript boolean switch-statement boolean-logic

我有2个布尔值,boolA和boolB。 我想要一个单一的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东西。

5 个答案:

答案 0 :(得分:4)

Mozilla MDN文档通过使开关评估true然后将逻辑放在switch语句中来引用此方法来实现您的目标

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逻辑来使事情更清楚。

答案 1 :(得分:2)

我决定使用

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];
}

将布尔值解析为二进制数中的位。

答案 2 :(得分:1)

另一种实现方式是根本不使用switch语句。您可以创建一个javascript对象,将布尔值映射为函数对象的键。

var truthTable = {
    false: {
        false: falsefalseFunc,
        true: falsetruefunc
    },
    true: {
        false: truefalseFunc,
        true: truetrueFunc
    }
}

其中falsefalseFunc,falsetrueFunc等等是函数对象。然后你可以这样称呼它:

truthTable[boolA][boolB]();

答案 3 :(得分:0)

我认为我不这样做。

但是,如果非常想要,您可以使用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;
}

或者,如果您更喜欢数字,(10 * boolA) + boolB

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;
}

这两个隐式转换都在规范中得到保证。

答案 4 :(得分:0)

结合unary + operator的ES6替代方案:

switch (`${+boolA}${+boolB}`) {
    case "00": //logic
      break;
    case "10": //logic
      break;
    case "01": //logic
      break;
    case "11": //logic
      break;
  }