La sentencia switch en JavaScript: elegir una rama entre muchas
El switch es una estructura de control pensada para cuando necesitas comparar un mismo valor contra varias opciones conocidas. Una cadena de if/else if/else hace exactamente lo mismo, pero cuando llevas tres o cuatro comprobaciones seguidas sobre la misma variable, switch se lee mucho mejor.
Esta es su forma básica:
Si lo lees de arriba a abajo: JavaScript evalúa day, lo compara con cada etiqueta case y ejecuta el bloque que coincida. El default atrapa cualquier cosa que no haya coincidido, igual que un else al final. El orden de lectura es valor → case → código.
Cómo funciona realmente la comparación en switch
switch compara con igualdad estricta, es decir, con el operador ===. Sin conversión de tipos, sin coincidencias aproximadas. case 1: coincidirá con el número 1, pero no con la cadena "1".
Solo coincide el segundo caso. Si alguna vez te sorprende que tu switch no se dispare, lo más habitual es un desajuste entre string y número que viene de un input de formulario o de un parámetro de la URL.
break es lo que corta el flujo
Aquí es donde mucha gente tropieza. Una etiqueta case es un punto de salto, no un bloque aislado. En cuanto la ejecución cae en un caso que coincide, sigue corriendo línea por línea — atravesando incluso la etiqueta del siguiente case — hasta toparse con break, return, o el final del switch.
Mira lo que pasa sin break:
El valor coincide con "editor", pero aun así obtienes puede editar, puede ver y con sesión iniciada. Eso es el fallthrough: la ejecución siguió cayendo en cada case posterior porque nada le indicó que se detuviera.
Añade break y todo vuelve a su sitio:
Costumbre: cada case termina con break, salvo que quieras fallthrough a propósito.
Fallthrough intencional para agrupar casos
El fallthrough no siempre es un error. Omitir el break es una forma limpia de decir "estos casos hacen exactamente lo mismo":
Las etiquetas case vacías apiladas comparten el bloque que tienen debajo. Fíjate en que no hace falta break después de un return: la función sale por completo. Un return dentro de un switch se salta todo lo que habría venido a continuación.
Cuando sí quieras aprovechar el fallthrough entre casos con código, deja un comentario para que quien lea el código después no lo "arregle" sin querer:
default no tiene por qué ir al final
Por convención, default se escribe al final, que es donde la mayoría de la gente espera encontrarlo al leer el código. Pero, técnicamente, es una etiqueta más: se activa cuando ningún case coincidió, esté donde esté. Si lo colocas en medio sin break, caerá (fallthrough) en lo que venga después. Mejor déjalo al final, ciérralo con break (o no, total ya no hay nada debajo) y tu yo del futuro te lo agradecerá.
Cómo limitar el alcance de variables dentro de un case
Todos los case comparten el mismo ámbito de bloque: el del switch completo. Por eso, si declaras un let o const con el mismo nombre en dos casos distintos, salta un error de redeclaración:
switch (x) {
case 1:
let msg = "one";
break;
case 2:
let msg = "two"; // SyntaxError: Identifier 'msg' has already been declared
break;
}
La solución es usar un bloque por cada caso: envuelve el cuerpo entre { }:
Ahora cada msg vive en su propio ámbito y la colisión desaparece. Conviene tenerlo presente siempre que un case necesite más de una o dos líneas de lógica.
switch vs if/else en JavaScript
switch brilla cuando comparas un solo valor contra muchas opciones fijas: códigos HTTP, tipos de acciones de Redux, nombres de comandos, cadenas que funcionan como enums. El valor aparece una vez arriba del todo y la vista del lector puede recorrer las etiquetas de los case como si fueran un índice.
if/else resulta mejor cuando:
- Comparas rangos (
score >= 90,score >= 75). - Las condiciones mezclan variables distintas o expresiones booleanas.
- Necesitas igualdad débil o comparaciones personalizadas (
switchsiempre usa===).
Una alternativa moderna y muy extendida para el primer patrón es usar un objeto como tabla de búsqueda:
Tres líneas en lugar de un switch de nueve. Cuando los casos son simples mapeos de datos sin lógica de verdad, un objeto (o un Map) suele leerse mejor. Deja el switch para cuando cada caso tenga que hacer algo real.
Siguiente paso: bucles for
El switch resuelve una decisión frente a muchas opciones. La siguiente pieza del control de flujo es la repetición: ejecutar el mismo bloque de código una y otra vez. Para eso están los bucles for, que vemos a continuación.
Preguntas frecuentes
¿Cómo funciona un switch en JavaScript?
switch compara un valor contra una lista de etiquetas case usando igualdad estricta (===). Cuando encuentra una coincidencia, ejecuta el código de ese caso y sigue ejecutando hasta que llegue a un break o al final del bloque. La cláusula default, que es opcional, se ejecuta si ningún case coincide.
¿Qué es el fallthrough en un switch de JavaScript?
Si un case no termina con break (ni con return), la ejecución continúa cayendo en el código del siguiente case, aunque su etiqueta no coincida. A veces resulta útil para agrupar casos que comparten lógica, pero en la mayoría de ocasiones es un bug. Cierra siempre tus case con break, salvo que quieras fallthrough a propósito.
¿Cuándo conviene usar switch en lugar de if/else en JavaScript?
Usa switch cuando estés comparando un único valor contra muchas opciones fijas: códigos HTTP, action types de Redux, comandos en forma de string, etc. Quédate con if/else si necesitas rangos, varias variables o expresiones booleanas. Recuerda que switch compara con igualdad estricta, así que case '1' no casa con el número 1.