我需要在JavaScript开关语句的多个情况下,类似于:

switch (varName)
{
   case "afshin", "saeed", "larry":
       alert('Hey');
       break;

   default:
       alert('Default case');
       break;
}

我该怎么做呢?如果在JavaScript中没有办法做这样的事情,我想知道一个也遵循DRY概念的替代解决方案。


当前回答

我是这样使用的:

switch (true){
     case /Pressure/.test(sensor): 
     {
        console.log('Its pressure!');
        break;
     }

     case /Temperature/.test(sensor): 
     {
        console.log('Its temperature!');
        break;
     }
}

其他回答

添加并澄清Stefano的答案,您可以使用表达式动态地设置switch中的条件值,例如:

var i = 3
switch (i) {
    case ((i>=0 && i<=5) ? i : -1):
        console.log('0-5');
        break;

    case 6: console.log('6');
}

在你的问题中,你可以这样做:

var varName = "afshin"
switch (varName) {
    case (["afshin", "saeed", "larry"].indexOf(varName)+1 && varName):
      console.log("hey");
      break;

    default:
      console.log('Default case');
}

虽然很干…

使用switch语句的直通特性。匹配的case会一直运行,直到找到break(或者switch语句的结尾),所以你可以这样写:

switch (varName)
{
   case "afshin":
   case "saeed":
   case "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
}

在Javascript中,要在一个switch中分配多个case,我们必须定义不同的case,中间没有中断,如下所示:

   <script>
      function checkHere(varName){
        switch (varName)
           {
           case "saeed":
           case "larry":
           case "afshin":
                alert('Hey');
                break;
          case "ss":
               alert('ss');
               break;
         default:
               alert('Default case');
               break;
       }
      }
     </script>

请点击链接查看示例

switch语句用于根据条件从许多代码块中选择要执行的一个

switch表达式中的值与提供的不同值进行比较 如果匹配,则执行与之相关的代码块 如果没有匹配,则执行默认块

语法:

switch(expression) {
  case x:
    // code block
    break;
  case y:
    // code block
    break;
  default:
    // code block
}

注意: 必须注意的是,如果省略了break语句,那么即使它们与switch表达式不匹配,下一个块也将被执行。因此,如果不想获得指定的行为,不要忘记在每个代码块的末尾添加break语句

一个实际的例子: 下面的代码基于一个整数(由'new Date().getDay()'提供)以字符串形式返回一周中的当前日期。

switch (new Date().getDay()) {
  case 0:
    day = "Sunday";
    break;
  case 1:
    day = "Monday";
    break;
  case 2:
     day = "Tuesday";
    break;
  case 3:
    day = "Wednesday";
    break;
  case 4:
    day = "Thursday";
    break;
  case 5:
    day = "Friday";
    break;
  case 6:
    day = "Saturday";
}

代码样本取自W3Schools

下面是完全避免switch语句的不同方法:

var cases = {
  afshin: function() { alert('hey'); },
  _default: function() { alert('default'); }
};
cases.larry = cases.saeed = cases.afshin;

cases[ varName ] ? cases[ varName ]() : cases._default();