2011-06-28 19 views
154

你会如何使用switchcase当你需要测试在同一案件中一个b测试多个案件在交换机,像OR(||)

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

[使用OR运算符在javascript switch语句]可能重复(http://stackoverflow.com/questions检查/ 6476994 /使用或运算符在JavaScript的开关语句) - 这是100%你的问题;) –

回答

347

可以使用落空:

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

它被称为* fall-through *。 –

+1

我在发布问题之前发现了这个问题,但认为它对社区很有用,因为它在任何地方都没有很好的文档记录......谢谢@SLaks对你也是一样。 – Andres

+0

嗨@kei我知道这不是适当的地方,但你正确回答我的最后一个问题http://stackoverflow.com/questions/21049005/jquery-animate-background-color-not-animating?noredirect=1 #comment31647804_21049005你想重新发布你的答案吗? –

12

你需要做两个case标签。

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

90

由于其他答案解释如何做到这一点没有实际解释为什么它的工作原理:当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不工作您预期的方式的第一件事。出于这个原因,有些人希望发表评论以表达“突破”,以明确何时故意删除断言。我这样做,在下面的例子中,因为它是更复杂一点,并显示一些情况下,如何能够包括代码来执行他们的下通前:

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或任何其他值,你会看到“结束”。

+6

+1的详细解释 – Praesagus

+4

//通过评论下载使我的phpstorm停止警告我关于fall-through switch语句,谢谢:) – Getz

-3

使用逗号分隔情况下

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

如果pageid是'“listing-page”',则不起作用。 – kodkod

1

你必须选择它!

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

忘记switchbreak,让与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"); 
}