Esta es una corrección de Gumbo's answer. Estoy escribiendo una respuesta por separado solo porque esto no encajará como un comentario.
Edit: Gumbo sugirió en un comentario que puede haber leído mal la intención de Doug.Si el OP realmente quiere que tanto "bye" como "lol" se impriman para count> = 4, entonces necesitamos eliminar un break
del switch
. Los casos son ahora de nuevo en el orden original, por lo que "adiós" y "lol" se imprimen en ese orden (que al parecer es la intención de la OP.)
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;
}
En este caso, estoy de acuerdo con el Gumbo que la la declaración revisada if
es correcta.
Respuesta original sigue (se supone que la OP sea realmente quería "lol" o "adiós" para imprimir, pero no ambos.)
El switch
comunicado que Gumbo wrote no va a funcionar para el recuento> = 4, por la misma razón que la declaración original de Gumbo if
no funcionará: dado que los casos se evalúan en secuencia, el recuento> = 4 implica que se ejecutará el segundo caso (conteo> 3); por lo que el guión nunca llegará a la prueba de recuento> = 4. Para solucionar este problema, las pruebas deben ser ejecutados en orden inverso, de mayor a menor:
switch (true) {
case (count >= 4):
document.write("lol");
break;
case (count > 3):
document.write("bye");
break;
case (count == 2):
document.write("hi");
break;
}
La declaración corregida if
todavía no está bien tampoco, porque para contar> = 4 producirá ambosbye
y lol
en la salida. Una vez más, las pruebas dentro de la escalera if
deben estar dispuestos para ir de mayor a valores más bajos:
if (count >= 4) {
document.write("lol");
} else if (count > 3) {
document.write("bye");
} else if (count == 2) {
document.write("hi");
}
Esto no es un ejemplo ideal, porque si count
es un número entero, entonces la evaluación de count >= 4
y count > 3
producirá el mismo resultados - true
para el recuento> = 4, false
en caso contrario. Ese no sería el caso si count
es un valor de coma flotante (pero entonces, un valor de coma flotante llamado "conteo" plantearía otras preocupaciones).
@Doug - the 'if (count> = 4)' expresión nunca se evaluará como verdadera en este contexto. No estoy seguro de por qué está allí. –
@Doug: elimine el último 'else' en su lugar. – Gumbo
Todavía hay problemas con el orden de evaluación en las instrucciones switch y if. Ver mi comentario a continuación: http://stackoverflow.com/questions/2312817/javascript-switch-with-logical-operators/3282442#3282442 –