Estoy tratando de usar una declaración de cambio de la siguiente manera. Pero incluso si el estado es 301, el caso case (status > 200 && status < 400) se ignora y el resultado es el caso "predeterminado". ¿Qué estoy haciendo mal? ¿No es posible usar condiciones en declaraciones de casos?
status = 301; switch (status) { case 0: case 200: console.log('200'); break; case (status > 200 && status < 400): console.log('200-400'); break; case 404: console.log('404'); break; default: console.log('Si è verificato un errore irreversibile.'); }Al final resolví con un simple if, pero me gustaría saber por qué esto no funciona.
No es así como funciona switch / case en JavaScript; solo puede hacer coincidir valores, no condiciones. Lo que sucede aquí es que status > 200 && status < 400 se evalúa como true , y true obviamente no es lo mismo que 301 .
De hecho, una simple cadena if / else if /.../ else es la solución habitual aquí.
Esto se puede lograr siguiendo:
const status = 301; switch (true) { case status === 0: case status === 200: console.log('200'); break; case (status > 200 && status < 400): console.log('200-400'); break; case status === 404: console.log('404'); break; default: console.log('Si è verificato un errore irreversibile.'); } Pero estoy de acuerdo con la sugerencia de @Thomas, deberíamos preferir usar la cadena if / else para este tipo de problemas.