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

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

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

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


当前回答

在Node.js中,你可以这样做:

data = "10";
switch(data){
    case "1": case "2": case "3": // Put multiple cases on the same
                                  // line to save vertical space.
        console.log("small");
        break;

    case "10": case "11": case "12":
        console.log("large");
        break;

    default:
        console.log("strange");
        break;
}

这使得代码在某些情况下更加紧凑。

其他回答

下面是另一个易于使用的开关case语句。可以满足您的要求。我们可以在switch语句中使用find方法来获得所需的输出。

    switch(varname){
    case["afshin","saeed","larry"].find(name => name === varname):
        alert("Hey")
        break;
    default:
        alert('Default case');
        break;
}

如果你正在使用ES6,你可以这样做:

if (['afshin', 'saeed', 'larry'].includes(varName)) {
   alert('Hey');
} else {
   alert('Default case');
}

或者对于JavaScript的早期版本,你可以这样做:

if (['afshin', 'saeed', 'larry'].indexOf(varName) !== -1) {
   alert('Hey');
} else {
   alert('Default case');
}

注意,include在一些浏览器(包括旧版本的IE)中不能工作,但你可以很容易地修补它。有关更多信息,请参阅javascript中确定字符串是否在列表中的问题。

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

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

   default: 
       alert('Default case');
}

我是这样使用的:

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

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

对我来说,这是最简单的方法:

switch (["afshin","saeed","larry"].includes(varName) ? 1 : 2) {
   case 1:
       alert('Hey');
       break;

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