在javascript switch语句中测试多个条件

时间:2019-02-08 00:02:00

标签: javascript

是否可以在javascript switch语句中测试多个条件?例如:

switch (var1 && var2) {
    case var1 == 1 || var2 == 1:
        alert("1");
        break;
    case var1 == 2 || var2 == 2:
        alert("2");
        break;
        //etc...
}

我问的原因是因为这比使用大量的if或switch语句容易得多。

4 个答案:

答案 0 :(得分:1)

JavaScript的switch的功能相当有限,但这并不是说您无法发挥创意:

switch ([ var1, var2 ].join(',')) {
  case '1,1':
    alert("1");
    break;
  case '2,2':
    alert("2");
    break;
}

此处将两个值与类似逗号的内容组合在一起意味着您拥有一个单个值,然后可以switch继续使用。 switch本身可以为同一个分支处理多个不同的匹配项,但是匹配项必须非常简单:

  case '1,1':
  case '1,2':
  case '1,3':
    // ...
    break;

其中任何一个都将遵循同一分支。

如果您正在寻找 var1var2可以是特定值的东西,那么该使用查找表的另一种方法了:

let alerts = {
  '1': '1',
  '2': '2'
};

let var1 = 3;
let var2 = 2;

let hit = [ var1, var2 ].some(v => {
  if (alerts[v]) {
    alert(alerts[v]);
    return true;
  }
});

您可以在此处使用some在可能测试的值数组中找到第一个匹配值。

请记住,在switch的上下文中,在切换发生之前会先评估每个条件。之所以不能像if那样评估它,是因为switch仅用于跟随一个分支和一个分支。 if链条必须从一个移到下一个,直到触发一个。

答案 1 :(得分:0)

这是不可能的,因为它将需要验证多个值,而switch语句不支持该值。

我的建议是:分离“或”条件并创建一些x函数,然后根据需要从每个单独的case语句中调用它们。

如果需要在多个case语句中执行相同的操作,请在每个case语句上调用相同的函数。

致谢!

答案 2 :(得分:0)

更新:时间流逝,我们收到新信息。因此,这是一个测试多个条件的示例:

let var1 = 2;
let var2 = 2;

switch(true) {
    case var1 === 1 || var2 === 1:
        console.log('1');
        break;
    case var1 === 2 || var2 === 2:
        console.log('2');
        break;
}

You Don't Know JS: Types & Grammar中发现了这种棘手的方法。 我强烈推荐整个系列。

原始答案:否。不可能。请参阅switch statement documentation

答案 3 :(得分:0)

不是,switch语句不能这样工作。这不会引发错误,但是不会产生预期的结果。 (var1 && var2)计算结果为true。因此,您的第一种情况是测试True ==(var1 == 1 || var 2 == 1)。

相反,您可能可以执行嵌套语句:

switch (var1){ 
  case 1:

     switch (var2){
         case 1:
            alert ("1")
            break;
     }
     // ...
}
//...

但是在这种情况下,为了清楚起见,我会选择嵌套的if语句