294

switch case当您需要在相同情况下测试a b时,您将如何使用 a ?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
4

7 回答 7

697

您可以使用直通:

switch (pageid)
{
    case "listing-page":
    case "home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
于 2011-06-28T21:58:52.717 回答
133

由于其他答案解释了如何做到这一点而没有实际解释它为什么起作用:

switch执行时,它会找到第一个匹配的case语句,然后执行 switch 之后的每一行代码,直到它遇到一个break语句或结束switch(或return离开整个包含函数的语句)。当您故意省略时break,下一个下的代码case也会被执行,这称为fall-through。所以对于OP的要求:

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

   case "details-page":
      alert("goodbye");
      break;
} 

忘记包含语句是一个相当常见的编码错误,如果您的工作方式不符合您的预期,这是break您应该寻找的第一件事。switch出于这个原因,有些人喜欢在评论中说“失败”,以明确何时故意省略了 break 语句。我在下面的示例中这样做,因为它有点复杂,并显示了某些情况如何在它们失败之前包含要执行的代码:

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

您还可以(可选地)包含一个default案例,如果其他案例都不匹配,则将执行该案例 - 如果您不包含 adefault并且没有案例匹配,那么什么也不会发生。您可以(可选)采用默认情况。

因此,在我的第二个示例中,如果someVar为 1,它将调用someFunction(),然后您会看到四个警报,因为它经历了多个案例,其中一些案例下有警报。是someVar3、4 或 5,您会看到两个警报。如果someVar是 7,您会看到“Something else”,如果是 8 或任何其他值,您会看到“The end”。

于 2011-06-29T00:32:50.490 回答
16

您需要制作两个case标签。

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

于 2011-06-28T21:59:06.993 回答
11

你必须切换它!

switch (true) {
    case ( (pageid === "listing-page") || (pageid === ("home-page") ):
        alert("hello");
        break;
    case (pageid === "details-page"):
        alert("goodbye");
        break;
}
于 2015-12-15T16:44:21.947 回答
2

忘记switchand break,让我们一起玩吧if。而不是断言

if(pageid === "listing-page" || pageid === "home-page")

让我们创建几个带有案例的数组并使用Array.prototype.includes()检查它

var caseA = ["listing-page", "home-page"];
var caseB = ["details-page", "case04", "case05"];

if(caseA.includes(pageid)) {
    alert("hello");
}
else if (caseB.includes(pageid)) {
    alert("goodbye");
}
else {
    alert("there is no else case");
}
于 2017-05-06T21:59:22.647 回答
1

更清洁的方法

if (["listing-page", "home-page"].indexOf(pageid) > -1)
    alert("hello");

else if (["exit-page", "logout-page"].indexOf(pageid) > -1)
    alert("Good bye");

您可以对具有相同结果的多个值执行此操作

于 2021-09-07T13:25:11.440 回答
-8

使用逗号分隔大小写

switch (pageid)
{
    case "listing-page","home-page":
        alert("hello");
        break;
    case "details-page":
        alert("goodbye");
        break;
}
于 2014-08-27T14:30:33.470 回答