2010-07-12 64 views

回答

13
switch(i){ 
    case 'foo': 
    case 'bar': 
    alert('foo or bar'); 
    break; 
    case 'other': 
    default: 
    alert('other'); 
} 

注:「其他」不需要,我只是表明你可以疊加使用默認情況下也是如此。

3

JavaScript不起作用。像這樣做:

switch(i){ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 

像C,JavaScript的case子句將級聯。

+0

杜!謝謝。我不知道我怎麼沒有想到這一點。 編輯 - 謝謝大家!對不起,我是個白癡。 – Greg 2010-07-12 04:10:32

1

你的榜樣的問題是表達('foo' || 'bar')計算結果爲'foo',因此,當i'foo'它只會匹配,決不當i'bar'

如果第一個操作數是truthy,則||運算符會生成其第一個操作數的值。否則它會生成第二個操作數的值。一個非空字符串總是真的,這就是爲什麼你的表達式返回'foo'

但是,在JavaScript中,每個case都會進入下一個案例,除非您明確中斷breakreturn的流程。因此,你可以很容易使其工作如下:

switch(i) { 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 
1
switch(i){ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 
5

official Mozilla Developer Center docs,使用多個的情況下,像這樣:

// multiple cases:  

    case "Mangoes": 
    case "Papayas": 
     document.write("Mangoes and papayas are $2.79 a pound.<br>"); 
     break; 
    default: 
     document.write("Sorry, we are out of " + expr + ".<br>"); 
} 

或者,如果尋找一個IE的解決方案,你會使用JScript docs for switch這是指區分條件「標籤」,並指出:

如果沒有使用 break語句,則會執行多個標籤塊。

有效地說,兩套文檔都說將多個案例放在一起是一回事。

1

會沿着這條線工作?

switch(i){ 
    case ('foo'): 
    case ('bar'): 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 
1
 
switch(i) 
{ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
     break; 
} 
1

您必須設置獨立的情況下,每個值。

switch(i) 
{ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 

使用你的代碼,你將只能得到警告,如果i計算結果爲真,因爲字符串不爲空也計算爲真。