2010-07-12 25 views

risposta

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

Nota: "altro" non è richiesto, sto solo mostrando che è possibile impilare i casi con default.

3

JavaScript non funziona in questo modo. Fare in questo modo:

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

Come in C, case clausola di JavaScript sarà cascata.

+0

Duh! Grazie. Non so come non ci ho pensato. modifica - grazie a tutti! Scusa se sono un idiota. – Greg

1

Il problema con il vostro esempio è che l'espressione ('foo' || 'bar') restituisce 'foo', e quindi selezionerà solo quando i è 'foo', e mai quando i è 'bar'.

L'operatore || produce il valore del suo primo operando se il primo operando è vero. Altrimenti produce il valore del secondo operando. Una stringa non vuota è sempre sincera, ed è per questo che la tua espressione sta restituendo 'foo'.

Tuttavia, in JavaScript ogni case rientra nel caso successivo a meno che non si interrompa esplicitamente il flusso con uno break o uno return. Quindi si può facilmente farlo funzionare come segue:

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

Dal official Mozilla Developer Center docs, utilizzare più i casi in questo modo:

// 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>"); 
} 

O se alla ricerca di una soluzione di IE si può usare il JScript docs for switch che si riferiscono a caso le condizioni come "etichette" e afferma:

più blocchi di etichetta vengono eseguiti se non viene utilizzata un'istruzione di interruzione .

In effetti entrambi i gruppi di documentazione dicono la stessa cosa di mettere insieme più casi.

1

Qualcosa lungo questa linea funziona?

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

è necessario impostare casi distinti per ogni valore.

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

Utilizzando il codice, si otterrà solo l'avviso se i restituisce true, in quanto una stringa che non è vuota anche valutata true.