Además del condicional, JavaScript también tiene la sentencia switch para ejecutar lógica de forma condicional.
Se usa cuando hay que comparar una sola variable con varias variantes.
La comparación se hace comprobando la igualdad estricta (===); consulta el concepto de comparación.
Para una variable x, la sentencia switch en JavaScript tiene la siguiente sintaxis.
switch (x) {
case option1:
// code that is executed when "x === option1" is true
break;
case option2:
// code that is executed when "x === option2" is true
break;
default:
// code that is executed when x does not equal any of the
// options
}
El caso default es opcional y se usa cuando quieres ejecutar algún código si ninguna de las otras opciones coincide con la variable.
Las sentencias break de arriba son necesarias porque, por defecto, todos los casos se ejecutan en cascada en JavaScript.
Eso significa que, sin ninguna sentencia break, se ejecutaría todo el código de los casos que están debajo de la primera opción que coincide, aunque x no coincida con esas opciones.
Este comportamiento de ejecución en cascada por defecto es una trampa común cuando usas switch en JavaScript.
Dentro de una función, también puedes usar return en lugar de break para evitar este problema.
Puedes aprovechar la ejecución en cascada a tu favor cuando quieres aplicar el mismo código a varios casos. Encontrarás un ejemplo de esto en la documentación de MDN.
Por defecto, las variables de las distintas sentencias case comparten el mismo ámbito.
Esto puede provocar un comportamiento inesperado.
Por ejemplo, al copiar y pegar un caso, podrías terminar con una declaración let message en dos casos, lo que da como resultado un error; consulta la documentación de MDN.
Para evitar problemas por el ámbito compartido, puedes crear un ámbito separado para cada sentencia case agregando bloques de código con llaves para cada uno.
switch (x) {
case option1: {
// Variables declared here are contained to this case.
break;
}
case option2: {
// ...
break;
}
default: {
// ...
}
}
En lugar de una variable x, también puedes usar una expresión.
Esa expresión se evalúa una sola vez al inicio de la sentencia switch y el resultado se compara con los casos.
Un uso común de esto es el «switch de tipo», que ejecuta código distinto según el tipo de una variable.
switch (typeof x) {
case 'string':
// code that is executed when x is a string
break;
case 'number':
// code that is executed when x is a number
break;
default:
// code that is executed when x has some other type
}
Las opciones también pueden ser expresiones.