开关情况下的JavaScript或expression式
当您需要在相同的情况下testing“a” 或 “b”时,您将如何使用开关盒?
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; }
由于其他答案解释了如何做到这一点,而没有真正解释为什么它的作品:
当switch
执行时,它find第一个匹配的case
语句,然后在交换机之后执行每一行代码,直到遇到break
语句或者switch
的结尾(或者return
语句离开整个包含函数)。 当你故意忽略这个break
这样下一个代码下的代码也会被执行,这就是所谓的下降 。 所以对于OP的要求:
switch (pageid) { case "listing-page": case "home-page": alert("hello"); break; case "details-page": alert("goodbye"); break; }
忘记包含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; }
你也可以(可选)包含一个default
情况下,如果没有其他的情况下匹配将被执行 – 如果你不包括一个default
情况下匹配则什么都不会发生。 您可以(可选)进入默认情况。
所以在我的第二个例子中,如果someVar
是1,它会调用someFunction()
,然后你会看到四个警报,因为它通过多个情况下,其中一些警报下有警报。 someVar
是3,4或5你会看到两个警报。 如果一些someVar
是7,你会看到“其他”,如果它是8或任何其他值,你会看到“结束”。
你需要制作两个case
标签。
控件将从第一个标签到第二个标签,所以他们都会执行相同的代码。
你必须切换它!
switch (true) { case ( (pageid === "listing-page") || (pageid === ("home-page") ): alert("hello"); break; case (pageid === "details-page"): alert("goodbye"); break; }
忘记switch
和break
,让我们玩吧。 而不是断言
if(pageid === "listing-page" || pageid === "home-page")
可以创build几个数组,并用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 (pageid) { case "listing-page","home-page": alert("hello"); break; case "details-page": alert("goodbye"); break; }