测试交换机中的多个案例,如OR(||)

And*_*res 222 javascript switch-statement fall-through

switch case当你需要在同一个案例中测试a b时,你将如何使用?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
Run Code Online (Sandbox Code Playgroud)

kei*_*kei 515

您可以使用直通:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
Run Code Online (Sandbox Code Playgroud)

  • 它被称为*fall-through*. (65认同)
  • 我在发布问题之前就发现了这个问题,但是认为它对社区有用,因为它没有在任何地方都有详细记录...谢谢@SLaks你也回答了. (2认同)

nnn*_*nnn 116

由于其他答案解释了如何做到这一点,而没有实际解释它的工作原理:

switch执行时,它找到第一个匹配case语句,然后在切换之后执行的代码的每一行,直至它碰到或者是break语句或的端部switch(或一个return语句留下含整个函数).当你故意省略时break,下面的代码case也会被执行,这就是所谓的堕落.所以对于OP的要求:

switch (pageid) {
   case "listing-page":
   case "home-page":
      alert("hello");
      break;

   case "details-page":
      alert("goodbye");
      break;
} 
Run Code Online (Sandbox Code Playgroud)

忘记包含break语句是一个相当常见的编码错误,如果你switch的工作方式不符合你的预期,那么你应该首先考虑.出于这个原因,有些人喜欢发表评论说"堕落",以便在故意忽略断言时明确说明.我在下面的例子中这样做,因为它有点复杂,并显示了一些情况如何包含在它们落实之前执行的代码:

switch (someVar) {
   case 1:
      someFunction();
      alert("It was 1");
      // fall through
   case 2:
      alert("The 2 case");
      // fall through
   case 3:
      // fall through
   case 4:
      // fall through
   case 5:
      alert("The 5 case");
      // fall through
   case 6:
      alert("The 6 case");
      break;

   case 7:
      alert("Something else");
      break;

   case 8:
      // fall through
   default:
      alert("The end");
      break;
}
Run Code Online (Sandbox Code Playgroud)

您还可以(可选)包含一个default案例,如果其他案例都不匹配,将会执行案例 - 如果您不包含default案例且没有案例匹配则不会发生任何事情.您可以(可选)进入默认情况.

所以在我的第二个例子中,如果someVar它是1,它会调用someFunction(),然后你会看到四个警报,因为它落在多个案例中,其中一些案例中有警报.是someVar3,4或5你会看到两个警报.如果someVar是7,你会看到"其他东西",如果它是8或任何其他值,你会看到"结束".

  • //通过评论让我的phpstorm停止警告我关于坠落切换语句,谢谢:) (4认同)

SLa*_*aks 14

你需要制作两个case标签.

控制将从第一个标签到第二个标签,因此它们都将执行相同的代码.


小智 6

您必须切换它!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}
Run Code Online (Sandbox Code Playgroud)