Questa è una correzione a Gumbo's answer. Sto scrivendo una risposta separata solo perché questo non si adatta come un commento.
Modifica: Gumbo ha suggerito in un commento che potrei aver letto male l'intenzione di Doug.Se l'OP vuole davvero sia "ciao" che "lol" da stampare per conteggio> = 4, allora dobbiamo rimuovere uno break
dal switch
. I casi sono ora di nuovo nell'ordine originale, in modo che "bye" e "lol" sono stampati in questo ordine (che è apparentemente l'intenzione del PO.)
switch (true) {
case (count == 2):
document.write("hi");
break;
case (count > 3):
document.write("bye");
// No break here; just fall through.
case (count >= 4):
document.write("lol");
break;
}
In questo caso, sono d'accordo con Gumbo che la la revisione dell'istruzione if
è corretta.
risposta originale segue (presuppone che il PO voleva davvero sia "lol" o "arrivederci" per stampare, ma non entrambi.)
Il switch
affermazione che Gumbo wrote non funzionerà per il conteggio> = 4, per lo stesso motivo per cui l'istruzione originale di Gumbo if
non funzionerà: poiché i casi vengono valutati in sequenza, il conteggio> = 4 implica che il secondo caso (conteggio> 3) verrà eseguito; così lo script non raggiungerà mai il test per il conteggio> = 4. Per risolvere il problema, i test dovrebbero essere eseguiti in ordine inverso, dal più alto al più basso:
switch (true) {
case (count >= 4):
document.write("lol");
break;
case (count > 3):
document.write("bye");
break;
case (count == 2):
document.write("hi");
break;
}
Il corretto if
affermazione non è ancora quello giusto sia, perché per il conteggio> = 4 produrrà siabye
e lol
sull'output. Ancora una volta, i test all'interno della scaletta if
devono essere disposti per passare da alto a valori più bassi:
if (count >= 4) {
document.write("lol");
} else if (count > 3) {
document.write("bye");
} else if (count == 2) {
document.write("hi");
}
Questo non è un esempio ideale, perché se count
è un numero intero, valutando count >= 4
e count > 3
produrrà stesso risultati - true
per il conteggio> = 4, false
in caso contrario. Questo non sarebbe il caso se count
è un valore a virgola mobile (ma poi, un valore a virgola mobile denominato "conteggio" solleverebbe altri problemi).
@Doug - il 'if (count> = 4)' espressione non valuterà mai il vero in questo contesto. Non sono sicuro del motivo per cui è lì. –
@Doug: rimuovi l'ultimo 'else' a volontà. – Gumbo
Ci sono ancora problemi con l'ordine di valutazione sia nelle istruzioni switch che if. Vedere il mio commento qui sotto: http://stackoverflow.com/questions/2312817/javascript-switch-with-logical-operators/3282442#3282442 –