C'è un modo per farlo funzionare con uno switch, sintatticamente?Operatori booleani in un'istruzione switch?
switch(i){
case ('foo' || 'bar'):
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
C'è un modo per farlo funzionare con uno switch, sintatticamente?Operatori booleani in un'istruzione switch?
switch(i){
case ('foo' || 'bar'):
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
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.
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.
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');
}
switch(i){
case 'foo':
case 'bar':
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
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.
Qualcosa lungo questa linea funziona?
switch(i){
case ('foo'):
case ('bar'):
alert('foo or bar');
break;
default:
alert('not foo or bar');
}
switch(i) { case 'foo': case 'bar': alert('foo or bar'); break; default: alert('not foo or bar'); break; }
è 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.
Duh! Grazie. Non so come non ci ho pensato. modifica - grazie a tutti! Scusa se sono un idiota. – Greg