JavaScript switch: case y fallback default

La sentencia switch de JavaScript evalúa una expresión una sola vez y envía la ejecución a una etiqueta case coincidente con igualdad estricta (===). Úsala para reemplazar cadenas de if...else cuando cada rama prueba la misma variable contra valores discretos: despachar comandos, mapear estados o manejar opciones fijas. Switch agrupa este flujo de control basado en valores en un bloque con comportamiento de fall-through explícito controlado por break.

Ejemplo de JavaScript switch para enrutamiento por valor

Salida:

La salida aparecerá aquí...

Salida:

Guardando archivo

Cómo funciona este ejemplo

  1. switch (comando) evalúa comando una vez y compara el resultado con cada etiqueta case de JavaScript en orden de aparición.
  2. El caso "guardar" coincide, así que la ejecución salta a esa rama y ejecuta console.log("Guardando archivo").
  3. break sale del bloque switch. Sin break, la ejecución hace fall-through hacia el siguiente cuerpo case sin importar si su etiqueta coincide.
  4. default actúa como caso general: se ejecuta cuando no coincide ninguna etiqueta case. No hace falta break después de default cuando aparece al final.

En una sentencia case de JavaScript como case "guardar":, la etiqueta es un valor a comparar, no una condición booleana separada.

Errores comunes en JavaScript switch case

Olvidar break: Sin break, la ejecución hace fall-through hacia cada cuerpo case posterior. Omite break solo cuando agrupes casos de forma intencional.

const comando = "guardar";

switch (comando) {
  // Incorrecto: registra ambos mensajes cuando comando es "guardar"
  case "guardar":
    console.log("Guardando");
  case "cerrar":
    console.log("Cerrando");
}

Mezclar tipos en etiquetas case: Switch usa ===, así que "2" nunca coincide con 2. Convierte la expresión a un tipo consistente antes del switch.

Reutilizar let/const entre cases: Todos los cases comparten el alcance del bloque switch. Dos cases que declaran let resultado provocan SyntaxError; envuelve cada case en { } para crear alcances léxicos separados.

switch vs if…else

Usa switch cuando…Usa if...else cuando…
Comparas una expresión contra múltiples valores fijosLas condiciones incluyen rangos, desigualdades o variables distintas
Varios cases comparten el mismo manejador mediante fall-throughCada rama tiene lógica compuesta e independiente

Para mapeos grandes de valor a acción, una búsqueda en objeto puede ser más limpia que cualquiera de los dos enfoques. Valida las claves faltantes para no llamar a undefined como función.

Más ejemplos

Agrupa varias etiquetas case para compartir un manejador:

const dia = "Sáb";
switch (dia) {
  case "Sáb":
  case "Dom":
    console.log("Fin de semana");
    break;
  default:
    console.log("Día laboral");
}

Apilar etiquetas case sin break entre ellas envía todos los valores listados al mismo bloque. Mantén corto el manejador compartido y termínalo con break, return o throw para evitar ejecutar cases posteriores por accidente. Si necesitas un comportamiento distinto por etiqueta, evita el fall-through y da a cada case su propio cuerpo y salida.

FAQ

¿JavaScript switch usa == o ===?

Switch compara con igualdad estricta (===). No hay coerción de tipos, así que 0 no coincide con "0" y null no coincide con undefined. Asegura que la expresión y las etiquetas case compartan el mismo tipo.

¿Qué pasa si omites break en un switch case?

La ejecución hace fall-through hacia el siguiente cuerpo case sin importar la etiqueta. Esto continúa hasta encontrar un break, return o el final del bloque switch. El fall-through intencional se usa para agrupar varias etiquetas case bajo un mismo manejador.

¿Puede default aparecer antes de otros cases?

Sí. default puede colocarse en cualquier parte del bloque switch. Aun así solo se ejecuta cuando ningún case coincide, y luego la ejecución continúa desde ese punto; por eso agrega break después de default salvo que sea la última cláusula.