测试开关中的多种情况,如OR (||)

在同样的情况下,当你需要测试一个 b时,你将如何使用switch case ?

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

你可以使用fall-through:

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

你需要创建两个case标签。

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

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

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

忘记包含break语句是一个相当常见的编码错误,如果你的switch没有按照你预期的方式工作,这是你应该寻找的第一件事。因此,当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;
}

你也可以(可选地)包含一个default case,如果其他case都不匹配,它将被执行——如果你不包含default并且没有case匹配,那么什么都不会发生。您可以(选择性地)使用默认情况。

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

用逗号分隔大小写

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

你得把它换掉!

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

忘记switchbreak吧,让我们用if来玩吧。而不是断言

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 (["listing-page", "home-page"].indexOf(pageid) > -1)
alert("hello");


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

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