当您需要在同一情况下测试a或b时,您将如何使用开关情况?

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

当前回答

忘记开关和断开,让我们玩如果。而不是断言

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

让我们创建几个带有case的数组,并使用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");
}

其他回答

忘记开关和断开,让我们玩如果。而不是断言

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

让我们创建几个带有case的数组,并使用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");
}

因为其他答案只是解释了如何做到这一点,而没有真正解释它为什么有效:

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

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

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

忘记包含break语句是一个相当常见的编码错误,如果您的开关没有按照您预期的方式工作,这是您应该寻找的第一件事。因此,当break语句被故意省略时,有些人喜欢加一个注释说“fall through”,以明确表示。我在下面的例子中这样做,因为它有点复杂,并展示了一些情况下如何包含在失败之前执行的代码:

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

您还可以(可选地)包含一个默认大小写,如果其他大小写都不匹配,则执行默认大小写——如果不包含默认大小写且没有大小写匹配,则什么都不会发生。您可以(选择性地)使用默认情况。

所以在我的第二个例子中,如果someVar是1,它会调用someFunction(),然后你会看到四个警报,因为它穿过多个情况,其中一些在它们下面有警报。issomevar是3 4或5你会看到两个警报。如果someVar是7,你会看到“其他东西”,如果它是8或任何其他值,你会看到“结束”。

你需要做两个箱子标签。

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

用逗号分隔大小写

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

你可以使用fall-through:

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