JavaScript,Typescript switch语句:两种情况下运行相同代码的方式?


67

有没有一种方法可以将两个不同的case值分配给同一代码块而无需复制和粘贴?例如,下面的68和40应该执行相同的代码,而30与之无关。

case 68:
   //Do something
break;

case 40:
   //Do the same thing
break;

case 30:
   //Do something different
break;

认为这样的事情应该起作用(即使显然不行)是不正确的吗?

case 68 || 40:
   //Do something
break;

case 30:
   //Do something else
break;

Answers:


185

只是将它们彼此紧紧地放在一起

switch (myVar) {
  case 68:
  case 40:
    // Do stuff
  break;

  case 30:
    // Do stuff
  break;
}

Sonar认为这是不适当的,另一种选择?
伊格纳西奥(Ignacio Ara)

@IgnacioAra这个问题的对象是Javascript。(尽管相同的代码也适用于C#)
史蒂文(Steven

@Steven是的,我知道,Sonar可用于多种语言(sonarqube.org
Ignacio Ara,

@IgnacioAra我看到了,我查找了一些有关案例的信息,将它们用作异常似乎很好:sbforge.org/sonar/rules/show/squid
Steven

我明白您的意思,希望他们尽快将其检测为异常(在Sonar工具中)将其修复。谢谢!
伊格纳西奥(Ignacio Ara)

19

是的,您只是将相关case语句彼此相邻,如下所示:

case 40:  // Fallthrough
case 68:
   // Do something
   break;

case 30:
   // Do something different
   break;

出现此Fallthrough评论有两个原因:

  • 它向人类读者保证您是故意这样做的
  • 它使类似于Lint的工具发出的警告消失,后者发出有关可能意外掉线的警告。

如果我们添加多个这样的案例,这将是一个“和”案例还是一个“或案例”
Kurkula

我不知道您所说的“和情况”是什么意思。该值不能同时为40和68。如果值为40,则代码将“执行某些操作”。如果值为68,它将“执行某些操作”。如果值为30,它将“做一些不同的事情”。
RichieHindle


0

开关箱可以按挖孔所示进行组合。

此外,它不仅限于两种情况,您可以将其扩展为任何一种情况。的情况。


2
虽然此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能无效
slfan

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.