Aprende a dominar switch en JavaScript para decidir entre múltiples opciones con una sintaxis clara y mantenible. Con una metáfora simple de menú, se explica cuándo preferir if/else o switch, cómo organizar case, break y default, y cómo agrupar valores sin repetir código.
¿Qué es switch y cuándo usarlo en JavaScript?
Switch es una estructura de control que compara una misma expresión con varios valores y ejecuta el código del caso que coincide. Se entiende como elegir de un menú: una sola elección válida entre varias. Frente a if/else, que es más dinámico y abierto, switch es ideal cuando comparas un único valor contra muchas opciones.
Compara una misma expresión con varios casos.
Evita cadenas largas de condiciones repetidas.
Ordena el código cuando hay muchas opciones discretas.
If/else sigue siendo útil cuando necesitas condiciones más flexibles.
¿Cómo se compone la estructura con case, break y default?
La anatomía es directa: palabra reservada switch, una expresión entre paréntesis y un bloque con múltiples case. Cada case usa dos puntos, no punto y coma. Con break indicas que termine el caso actual y no continúe al siguiente. Default cubre cuando no hay coincidencia.
Switch (expresión): inicia el bloque y define qué se evaluará.
Case valor: ejecuta si coincide con la expresión.
Break: corta la ejecución y evita que se ejecute el siguiente caso.
Default: opción por defecto cuando no coincide ningún caso.
Es clave respetar la estructura y los dos puntos tras cada case.
¿Cómo pensar y abstraer sin repetir código?
Agrupa valores que comparten la misma acción para que “caigan” al mismo bloque. Así evitas escribir la misma instrucción varias veces y mejoras la organización y la lógica. Este enfoque requiere abstraer la información y mantener un pensamiento estructurado.
¿Cómo programar el ejemplo del día de la semana en JavaScript?
Se define una constante con el día y se organizan los casos para días laborales y fin de semana. Es recomendable usar todo en minúsculas para evitar errores de coincidencia.
const dia ="lunes";// un string con el día seleccionadoswitch(dia){case"lunes":case"martes":case"miércoles":case"jueves":case"viernes":console.log("día laboral");break;case"sábado":case"domingo":console.log("fin de semana");break;default:console.log("día no válido");}
Si dia es "lunes", "martes", "miércoles", "jueves" o "viernes", imprime día laboral.
Si dia es "sábado" o "domingo", imprime fin de semana.
Si no coincide con ningún caso, imprime día no válido.
¿Qué habilidades y buenas prácticas se refuerzan aquí?
Entender switch, case, break y default como unidad.
Usar console.log para verificar la ruta de ejecución.
Agrupar casos para evitar repetir código.
Mantener nombres coherentes y en minúsculas para comparar cadenas.
Decidir entre if/else y switch según el problema: una sola expresión con varias opciones favorece switch.
Evitar listados extensos sin valor real, como “treinta días” mal planteados; mejor abstraer y diseñar con intención.
¿Te animas a practicar y compartir tu solución en los comentarios? Los retos están en la sección de recursos y será genial ver cómo los resuelves con la comunidad.
console.log(Este dia = ${dia} no existe en la semana :V)
}
En lugar de poner un console.log para cada uno solo usamos el ${} que nos indica de una vez que dia es :)
Comparto mi código de los ejercicios
// ============================================// Reto: Switch en JavaScript// ============================================// Practica la estructura switch: case, break, default y agrupación de casos// para comparar una misma expresión con varias opciones.// Ejecuta los tests con: npx vitest src/10-switch// ============================================// --- Reto 1: Día laboral o fin de semana ---// Recibe "dia" (string en minúsculas: "lunes", "martes", ..., "domingo").// Retorna "día laboral" para lunes a viernes, "fin de semana" para sábado y domingo,// "día no válido" para cualquier otro valor.// Usa switch agrupando los casos que comparten la misma acción (sin repetir código).functiontipoDeDia(dia){// Tu código aquíswitch(dia){case'lunes':case'martes':case'miércoles':case'jueves':case'viernes':return'día laboral';break;case'sábado':case'domingo':return'fin de semana';break;default:return'día no válido'}}console.log(tipoDeDia('día'));// --- Reto 2: Mensaje según opción ---// Recibe "opcion" (string: "a", "b" o "c").// Retorna "Opción A" si opcion === "a", "Opción B" si "b", "Opción C" si "c".// Si no coincide con ninguno, retorna "opción no válida" (usa default).// Usa switch con break en cada case para que no se ejecute el siguiente.functionmensajeOpcion(opcion){// Tu código aquíswitch(opcion){case'a':return'Opción A';break;case'b':return'Opción B';break;case'c':return'Opción C';break;default:return'Opción no válida';break;}}console.log(mensajeOpcion('c'));// --- Reto 3: Categoría por código ---// Recibe "codigo" (string: "E1", "E2", "H1").// Retorna "electrónica" para "E1" y "E2" (agrupa ambos case en un mismo resultado).// Retorna "hogar" para "H1".// Retorna "desconocido" para cualquier otro (default).// Practica agrupar varios case que comparten la misma acción.functioncategoriaPorCodigo(codigo){// Tu código aquíswitch(codigo){case'E1':case'E2':return'electrónica';break;case'H1':return'hogar';break;default:return'desconocido';}}console.log(categoriaPorCodigo('E2'));// --- Reto 4: Días del mes ---// Recibe "mes" (número del 1 al 12).// Retorna el número de días del mes: 31 para ene, mar, may, jul, ago, oct, dic;// 30 para abr, jun, sep, nov; 28 para feb.// Retorna 0 si el mes no es válido (default).// Usa switch agrupando los meses que tienen los mismos días.functiondiasDelMes(mes){// Tu código aquíswitch(mes){case'ene':case'mar':case'may':case'jul':case'ago':case'oct':case'dic':return31;break;case'abr':case'jun':case'sep':case'nov':return30;break;case'feb':return28;break;default:return0;}}console.log(diasDelMes('oct'));// --- Reto 5: Nivel de usuario ---// Recibe "nivel" (string: "principiante", "intermedio", "avanzado").// Retorna "acceso básico" para principiante, "acceso estándar" para intermedio,// "acceso completo" para avanzado.// Retorna "nivel no válido" para cualquier otro valor (default).functionnivelDeUsuario(nivel){// Tu código aquíswitch(nivel){case'principiante':return'acceso básico';break;case'intermedio':return'acceso estándar';break;case'avanzado':return'acceso completo';break;default:return'nivel no válido';break;}}console.log(nivelDeUsuario('intermedio'));module.exports={ tipoDeDia, mensajeOpcion, categoriaPorCodigo, diasDelMes, nivelDeUsuario,};
// ============================================// Reto: Switch en JavaScript// ============================================// Practica la estructura switch: case, break, default y agrupación de casos// para comparar una misma expresión con varias opciones.// Ejecuta los tests con: npx vitest src/10-switch// ============================================// --- Reto 1: Día laboral o fin de semana ---// Recibe "dia" (string en minúsculas: "lunes", "martes", ..., "domingo").// Retorna "día laboral" para lunes a viernes, "fin de semana" para sábado y domingo,// "día no válido" para cualquier otro valor.// Usa switch agrupando los casos que comparten la misma acción (sin repetir código).functiontipoDeDia(dia){switch(dia){case'lunes':case'martes':case'miércoles':case'jueves':case'viernes':return'día laboral';breakcase'sábado':case'domingo':return'fin de semana';breakdefault:return'día no válido';}}// --- Reto 2: Mensaje según opción ---// Recibe "opcion" (string: "a", "b" o "c").// Retorna "Opción A" si opcion === "a", "Opción B" si "b", "Opción C" si "c".// Si no coincide con ninguno, retorna "opción no válida" (usa default).// Usa switch con break en cada case para que no se ejecute el siguiente.functionmensajeOpcion(opcion){switch(opcion){case'a':return'Opción A';breakcase'b':return'Opción B';breakcase'c':return'Opción C';breakdefault:return'opción no válida';}// Tu código aquí}// --- Reto 3: Categoría por código ---// Recibe "codigo" (string: "E1", "E2", "H1").// Retorna "electrónica" para "E1" y "E2" (agrupa ambos case en un mismo resultado).// Retorna "hogar" para "H1".// Retorna "desconocido" para cualquier otro (default).// Practica agrupar varios case que comparten la misma acción.functioncategoriaPorCodigo(codigo){switch(codigo){case'E2':case'E1':return'electrónica';breakcase'H1':return'hogar';breakdefault:return"desconocido";}// Tu código aquí}// --- Reto 4: Días del mes ---// Recibe "mes" (número del 1 al 12).// Retorna el número de días del mes: 31 para ene, mar, may, jul, ago, oct, dic;// 30 para abr, jun, sep, nov; 28 para feb.// Retorna 0 si el mes no es válido (default).// Usa switch agrupando los meses que tienen los mismos días.functiondiasDelMes(mes){switch(mes){case1:case3:case5:case7:case8:case10:case12:return31;breakcase4:case6:case9:case11:return30;breakcase2:return28;breakdefault:return0}// Tu código aquí}// --- Reto 5: Nivel de usuario ---// Recibe "nivel" (string: "principiante", "intermedio", "avanzado").// Retorna "acceso básico" para principiante, "acceso estándar" para intermedio,// "acceso completo" para avanzado.// Retorna "nivel no válido" para cualquier otro valor (default).functionnivelDeUsuario(nivel){switch(nivel){case'principiante':return'acceso básico';breakcase'intermedio':return'acceso estándar';breakcase'avanzado':return'acceso completo';breakdefault:return'nivel no válido';}// Tu código aquí}module.exports={ tipoDeDia, mensajeOpcion, categoriaPorCodigo, diasDelMes, nivelDeUsuario,};
// ============================================
// Reto: Switch en JavaScript
// ============================================
// Practica la estructura switch: case, break, default y agrupación de casos
// para comparar una misma expresión con varias opciones.
// Ejecuta los tests con: npx vitest src/10-switch
// ============================================
// --- Reto 1: Día laboral o fin de semana ---
// Recibe "dia" (string en minúsculas: "lunes", "martes", ..., "domingo").
// Retorna "día laboral" para lunes a viernes, "fin de semana" para sábado y domingo,
// "día no válido" para cualquier otro valor.
// Usa switch agrupando los casos que comparten la misma acción (sin repetir código).
function tipoDeDia(dia) {
switch (dia) {
case 'lunes':
case 'martes':
case 'miércoles':
case 'jueves':
case 'viernes':
return 'día laboral';
break
case 'sábado':
case 'domingo':
return 'fin de semana';
break
default:
return 'día no válido';
}
}
// --- Reto 2: Mensaje según opción ---
// Recibe "opcion" (string: "a", "b" o "c").
// Retorna "Opción A" si opcion === "a", "Opción B" si "b", "Opción C" si "c".
// Si no coincide con ninguno, retorna "opción no válida" (usa default).
// Usa switch con break en cada case para que no se ejecute el siguiente.
function mensajeOpcion(opcion) {
switch (opcion) {
case 'a':
return 'Opción A';
break
case 'b':
return 'Opción B';
break
case 'c':
return 'Opción C';
break
default:
return 'opción no válida';
} // Tu código aquí
}
// --- Reto 3: Categoría por código ---
// Recibe "codigo" (string: "E1", "E2", "H1").
// Retorna "electrónica" para "E1" y "E2" (agrupa ambos case en un mismo resultado).
// Retorna "hogar" para "H1".
// Retorna "desconocido" para cualquier otro (default).
// Practica agrupar varios case que comparten la misma acción.
function categoriaPorCodigo(codigo) {
switch (codigo) {
case 'E2':
case 'E1':
return 'electrónica';
break
case 'H1':
return 'hogar';
break
default:
return "desconocido";
} // Tu código aquí
}
// --- Reto 4: Días del mes ---
// Recibe "mes" (número del 1 al 12).
// Retorna el número de días del mes: 31 para ene, mar, may, jul, ago, oct, dic;
// 30 para abr, jun, sep, nov; 28 para feb.
// Retorna 0 si el mes no es válido (default).
// Usa switch agrupando los meses que tienen los mismos días.
// Retorna "acceso básico" para principiante, "acceso estándar" para intermedio,
// "acceso completo" para avanzado.
// Retorna "nivel no válido" para cualquier otro valor (default).
function nivelDeUsuario(nivel) {
switch (nivel) {
case 'principiante':
return 'acceso básico';
break
case 'intermedio':
return 'acceso estándar';
break
case 'avanzado':
return 'acceso completo';
break
default:
return 'nivel no válido';
} // Tu código aquí
}
module.exports = {
tipoDeDia,
mensajeOpcion,
categoriaPorCodigo,
diasDelMes,
nivelDeUsuario,
};
const dia = new Date().getDay();
switch (dia) {
case 1:
console.log("Es lunes");
break;
case 2:
console.log("Es martes");
break;
case 3:
console.log("Es miercoles");
break;
case 4:
console.log("Es jueves");
break;
case 5:
console.log("Es viernes");
break;
case 6:
console.log("Es sabado");
break;
case 0:
console.log("Es domingo");
break;
default:
console.log("No es un dia valido");
break;
}
// ============================================// Reto: Switch en JavaScript// ============================================// Practica la estructura switch: case, break, default y agrupación de casos// para comparar una misma expresión con varias opciones.// Ejecuta los tests con: npx vitest src/10-switch// ============================================// --- Reto 1: Día laboral o fin de semana ---// Recibe "dia" (string en minúsculas: "lunes", "martes", ..., "domingo").// Retorna "día laboral" para lunes a viernes, "fin de semana" para sábado y domingo,// "día no válido" para cualquier otro valor.// Usa switch agrupando los casos que comparten la misma acción (sin repetir código).functiontipoDeDia(dia){switch(dia){case'lunes':case'martes':case'miercoles':case'jueves':case'viernes':console.log('Dia laboral');break;case'sabado':case'domingo':console.log('Fin de semana.');break;default:console.log('No es un dia valido');}}// --- Reto 2: Mensaje según opción ---// Recibe "opcion" (string: "a", "b" o "c").// Retorna "Opción A" si opcion === "a", "Opción B" si "b", "Opción C" si "c".// Si no coincide con ninguno, retorna "opción no válida" (usa default).// Usa switch con break en cada case para que no se ejecute el siguiente.functionmensajeOpcion(opcion){switch(opcion){case'a':console.log('Opcion 'A'');break;case'b':console.log('Opcion 'B'');break;case'c':console.log('Opcion 'C'');break;default:console.log('opcion no valida'),}}mensajeOpcion('a');mensajeOpcion('b');mensajeOpcion('c');mensajeOpcion('d');// --- Reto 3: Categoría por código ---// Recibe "codigo" (string: "E1", "E2", "H1").// Retorna "electrónica" para "E1" y "E2" (agrupa ambos case en un mismo resultado).// Retorna "hogar" para "H1".// Retorna "desconocido" para cualquier otro (default).// Practica agrupar varios case que comparten la misma acción.functioncategoriaPorCodigo(codigo){switch(codigo.toUpperCase()){case'E1':case'E2':return'electronica';break;case'H1':return'hogar';break;default:return'desconocido';break;}}console.log(categoriaPorCodigo('e1'));console.log(categoriaPorCodigo('H1'));console.log(categoriaPorCodigo('f1'));// --- Reto 4: Días del mes ---// Recibe "mes" (número del 1 al 12).// Retorna el número de días del mes: 31 para ene, mar, may, jul, ago, oct, dic;// 30 para abr, jun, sep, nov; 28 para feb.// Retorna 0 si el mes no es válido (default).// Usa switch agrupando los meses que tienen los mismos días.functiondiasDelMes(mes){switch(mes){case1:case3:case5:case7:case8:case10:case12:return'este mes tiene 31 dias';break;case4:case6:case9:case11:return'este mes tiene 30 dias';break;case2:return'este mes tiene 28 dias';break;default:return'mes inexistente';break;}}console.log(diasDelMes(2));console.log(diasDelMes(4));console.log(diasDelMes(1));console.log(diasDelMes(0));// --- Reto 5: Nivel de usuario ---// Recibe "nivel" (string: "principiante", "intermedio", "avanzado").// Retorna "acceso básico" para principiante, "acceso estándar" para intermedio,// "acceso completo" para avanzado.// Retorna "nivel no válido" para cualquier otro valor (default).functionnivelDeUsuario(nivel){switch(nivel.toUpperCase()){case'principiante':return'acceso basico';break;case'intermedio':return'acceso estandar';break;case'avanzado':return'acceso completo';break;default:return'nivel no valido';break;}}console.log(nivelDeusuario('Principiante'));console.log(nivelDeusuario('intermedio'));console.log(nivelDeusuario('AVANZADO'));console.log(nivelDeusuario('admin'));module.exports={ tipoDeDia, mensajeOpcion, categoriaPorCodigo, diasDelMes, nivelDeUsuario,};
Por si a alguien le interesa o le sirve.
// ============================================// Reto: Switch en JavaScript// ============================================// Practica la estructura switch: case, break, default y agrupación de casos// para comparar una misma expresión con varias opciones.// Ejecuta los tests con: npx vitest src/10-switch// ============================================// --- Reto 1: Día laboral o fin de semana ---// Recibe "dia" (string en minúsculas: "lunes", "martes", ..., "domingo").// Retorna "día laboral" para lunes a viernes, "fin de semana" para sábado y domingo,// "día no válido" para cualquier otro valor.// Usa switch agrupando los casos que comparten la misma acción (sin repetir código).functiontipoDeDia(dia){// Tu código aquílet mensaje ='';switch(dia){case'lunes':case'martes':case'miércoles':case'jueves':case'viernes': mensaje ='día laboral';break;case'sábado':case'domingo': mensaje ='fin de semana';break;default: mensaje ='día no válido';break;}return mensaje;}// --- Reto 2: Mensaje según opción ---// Recibe "opcion" (string: "a", "b" o "c").// Retorna "Opción A" si opcion === "a", "Opción B" si "b", "Opción C" si "c".// Si no coincide con ninguno, retorna "opción no válida" (usa default).// Usa switch con break en cada case para que no se ejecute el siguiente.functionmensajeOpcion(opcion){// Tu código aquílet mensaje ='';switch(opcion){case'a': mensaje ='Opción A'break;case'b': mensaje ='Opción B';break;case'c': mensaje ='Opción C';break;default: mensaje ='opción no válida';break;}return mensaje;}// --- Reto 3: Categoría por código ---// Recibe "codigo" (string: "E1", "E2", "H1").// Retorna "electrónica" para "E1" y "E2" (agrupa ambos case en un mismo resultado).// Retorna "hogar" para "H1".// Retorna "desconocido" para cualquier otro (default).// Practica agrupar varios case que comparten la misma acción.functioncategoriaPorCodigo(codigo){// Tu código aquílet mensaje ='';switch(codigo){case'E1':case'E2': mensaje ='electrónica';break;case'H1': mensaje ='hogar'break;default: mensaje ='desconocido';break;}return mensaje;}// --- Reto 4: Días del mes ---// Recibe "mes" (número del 1 al 12).// Retorna el número de días del mes: 31 para ene, mar, may, jul, ago, oct, dic;// 30 para abr, jun, sep, nov; 28 para feb.// Retorna 0 si el mes no es válido (default).// Usa switch agrupando los meses que tienen los mismos días.functiondiasDelMes(mes){// Tu código aquílet numeroDias;switch(mes){case1:case3:case5:case7:case8:case10:case12: numeroDias =31;break;case2: numeroDias =28;break;case4:case6:case9:case11: numeroDias =30;break;default: numeroDias =0;break;}return numeroDias;}// --- Reto 5: Nivel de usuario ---// Recibe "nivel" (string: "principiante", "intermedio", "avanzado").// Retorna "acceso básico" para principiante, "acceso estándar" para intermedio,// "acceso completo" para avanzado.// Retorna "nivel no válido" para cualquier otro valor (default).functionnivelDeUsuario(nivel){// Tu código aquílet mensaje ='';switch(nivel){case'principiante': mensaje ='acceso básico';break;case'intermedio': mensaje ='acceso estándar';break;case'avanzado': mensaje ='acceso completo';break;default: mensaje ='nivel no válido';break;}return mensaje;}module.exports={ tipoDeDia, mensajeOpcion, categoriaPorCodigo, diasDelMes, nivelDeUsuario,};