Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一个开关箱中是否可能有多个开关箱?_Javascript - Fatal编程技术网

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