JavaScript 中多个 case 的 Switch 语句

IT技术 javascript switch-statement
2021-01-27 20:38:08

我在 JavaScript 中的 switch 语句中需要多个案例,例如:

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

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

我怎样才能做到这一点?如果没有办法在 JavaScript 中做类似的事情,我想知道一个也遵循DRY 概念的替代解决方案

6个回答

使用switch语句的贯穿功能匹配的 case 将一直运行,直到找到 a break(或switch语句的结尾),所以你可以这样写:

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

   default: 
       alert('Default case');
}
不知何故,它在 Chrome 中对我有用,在 javascript 控制台中:switch('10') { case 1, '10': console.log('ok') }打印ok
2021-03-17 20:38:08
@nafg:试试switch(1)这里的标签只是一个逗号表达式。
2021-03-24 20:38:08
@Seiyira 根据定义,在最后一个案例之后没有下一个案例。此外,这是默认设置。
2021-03-27 20:38:08
@Barney 不,如果没有休息,您可能会陷入下一个案例。
2021-03-30 20:38:08

这适用于常规 JavaScript:

function theTest(val) {
  var answer = "";
  switch( val ) {
    case 1: case 2: case 3:
      answer = "Low";
      break;
    case 4: case 5: case 6:
      answer = "Mid";
      break;
    case 7: case 8: case 9:
      answer = "High";
      break;
    default:
      answer = "Massive or Tiny?";
  }
  return answer;
}

theTest(9);
你也可以使用 case (1||2||3): 而不是 case 1: case 2: case 3:
2021-03-20 20:38:08
@believesInSanta 这实际上只是带有奇怪格式(空格而不是换行符)的正常情况
2021-03-21 20:38:08
@KasunHasanga 建议的解决方案不起作用的原因是因为case (1||2||3):等效于case 1:(因为1||2||3评估为1)。
2021-03-23 20:38:08
案例 1:案例 2:案例 3:为我工作,谢谢,但 @kasun 您的解决方案不起作用。
2021-03-27 20:38:08
仅供参考,我在 TS 中尝试了@Kasun 的方法,但它对我不起作用(我知道 OP 想要 JS 中的解决方案)
2021-04-06 20:38:08

这是switch完全避免声明的不同方法

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

cases[ varName ] ? cases[ varName ]() : cases._default();
一个人总是可以通过右手穿过脖子后部来刮左耳......(对不起我的英语,我的意思是:“一个人总是可以尽可能地使事情复杂化......在这种情况下,避免使用switch语句支持这个复杂的解决方案似乎不是正确的做法......)
2021-03-17 20:38:08
我绝对更喜欢这个版本。Fall through 是switch ... case. 忘记一个break语句太容易了,如果你故意使用fall through,那些被遗忘的break语句可能很难被发现。这个方法查找版本也有很多switch ... case缺乏的强大功能,比如动态扩展性,或者完全替换对象完成模式切换的能力。保持干净的组织也更容易,并且可以产生更易于维护的代码。参见ericleads.com/2012/12/switch-case-thinked-harmful
2021-03-21 20:38:08
我总是添加注释//fallthrough的地方break,每当我故意省略了break这有助于识别什么时候是错误的,什么时候是故意的。
2021-03-26 20:38:08
我真的很惊讶这如何获得 34 票。在可读性和可维护性方面,这绝对是可怕的。如果我想查看哪些条件会触发某事,那么通过查看标签,case 语句非常简单且易于查看。另一方面,您的版本需要有人阅读几乎每一行并查看您分配的内容。您想要匹配的案例越多,情况也会变得更糟。
2021-03-29 20:38:08
直观的方法。但是,为了可读性,我建议使用本机 switch 语句。
2021-04-01 20:38:08

在 Javascript 中为一个 switch 分配多个 case,我们必须定义different case without break inbetween如下:

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

请查看示例点击链接

这是多种语言中的常用技术,不受 JS 的约束
2021-04-08 20:38:08

我喜欢这样的清晰度和DRY语法。

varName = "larry";

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

    default:
       alert('Default case');

}