Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
switch
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julio de 2015.
Ladeclaraciónswitch evalúa unaexpresión, comparando el valor de esa expresión con una instanciacase, y ejecutadeclaraciones asociadas a esecase, así como las declaraciones en loscase que siguen.
In this article
Syntaxis
switch (expresión) { case valor1: //Declaraciones ejecutadas cuando el resultado de expresión coincide con el valor1 [break;] case valor2: //Declaraciones ejecutadas cuando el resultado de expresión coincide con el valor2 [break;] ... case valorN: //Declaraciones ejecutadas cuando el resultado de expresión coincide con valorN [break;] default: //Declaraciones ejecutadas cuando ninguno de los valores coincide con el valor de la expresión [break;]}expresiónEs una expresión que es comparada con el valor de cada instancia
case.case valorNUna instancia
case valorNes usada para ser comparada con laexpresión. Si laexpresióncoincide con elvalorN, las declaraciones dentro de la instanciacasese ejecutan hasta que se encuentre el final de la declaraciónswitcho hasta encontrar una interrupciónbreak.defaultUna instancia
default, cuando es declarada, es ejecutada si el valor de laexpresiónno coincide con cualquiera de las otras instanciascase valorN.
Descripción
Si ocurre una coincidencia, el programa ejecuta las declaraciones asociadas correspondientes. Si la expresión coincide con múltiples entradas, la primera será la seleccionada, incluso si las mayúsculas son tenidas en cuenta.
El programa primero busca la primer instaciacase cuya expresión se evalúa con el mismo valor de la expresión de entrada (usandocomparación estricta,===) y luego transfiere el control a esa cláusula, ejecutando las declaraciones asociadas. Si no se encuentra una cláusula decase coincidente, el programa busca la cláusuladefault opcional, y si se encuentra, transfiere el control a esa instancia, ejecutando las declaraciones asociadas. Si no se encuentra una instanciadefault el programa continúa la ejecución en la instrucción siguiente al final delswitch. Por convención, la instanciadefault es la última cláusula, pero no tiene que ser así.
La declaraciónbreak es opcional y está asociada con cada etiqueta decase y asegura que el programa salga delswitch una vez que se ejecute la instrucción coincidente y continúe la ejecución en la instrucción siguiente. Si se omite elbreak el programa continúa la ejecución en la siguiente instrucción en la declaración deswitch .
Ejemplos
>Usandoswitch
En el siguiente ejemplo, siexpresión se resuelve a "Platanos", el algoritmo compara el valor con elcase "Platanos" y ejecuta la declaración asociada. Cuando se encuentra unbreak, el programa sale del condicionalswitch y ejecuta la declaración que lo procede. Si se omite elbreak, elcase "Cerezas" también es ejecutado.
switch (expr) { case "Naranjas": console.log("El kilogramo de naranjas cuesta $0.59."); break; case "Manzanas": console.log("El kilogramo de manzanas cuesta $0.32."); break; case "Platanos": console.log("El kilogramo de platanos cuesta $0.48."); break; case "Cerezas": console.log("El kilogramo de cerezas cuesta $3.00."); break; case "Mangos": case "Papayas": console.log("El kilogramo de mangos y papayas cuesta $2.79."); break; default: console.log("Lo lamentamos, por el momento no disponemos de " + expr + ".");}console.log("¿Hay algo más que te quisiera consultar?");¿Qué pasa si olvido un break?
Si olvidas unbreak, el script se ejecutará desde donde se cumple la condición y ejecutará el siguientecase independientemente si esta condición se cumple o no. Ver el siguiente ejemplo:
var foo = 0;switch (foo) { case -1: console.log("1 negativo"); break; case 0: // foo es 0, por lo tanto se cumple la condición y se ejecutara el siguiente bloque console.log(0); // NOTA: el "break" olvidado debería estar aquí case 1: // No hay sentencia "break" en el 'case 0:', por lo tanto este caso también será ejecutado console.log(1); break; // Al encontrar un "break", no será ejecutado el 'case 2:' case 2: console.log(2); break; default: console.log("default");}¿Puedo usar un <default> entre condiciones?
Sí, ¡es posible! JavaScript retornará a la instanciadefault en caso de no encontrar una coincidencia:
var foo = 5;switch (foo) { case 2: console.log(2); break; // al encontrar este 'break' no se continuará con el siguiente 'default:' default: console.log("default"); // fall-through case 1: console.log("1");}Al estar elcase 1: a continuación dedefault, y al no haber unbreak de por medio, veremos que la declaración delcase 1: será ejecutada, apareciendo el resultado1 en ellog de consola.
Metodos para casos con múltiple criterio
La fuente de esta técnica esta aquí:
Switch statement multiple cases in JavaScript (Stack Overflow)
Operación única con múltiples casos
Este método toma ventaja del hecho de que, si no hay unbreak debajo de una declaracióncase, continuará la ejecución hasta el siguientecase, ignorando si en dicho caso se cumple o no el criterio indicado. Comprobar en la sección¿Qué pasa si olvido unbreak?
Este es un ejemplo de operación única con sentenciaswitch secuencial, donde cuatro valores diferentes se comportan exactamente de la misma manera:
var Animal = "Jirafa";switch (Animal) { case "Vaca": case "Jirafa": case "Perro": case "Cerdo": console.log("Este animal subirá al Arca de Noé."); break; case "Dinosaurio": default: console.log("Este animal no lo hará.");}Operaciones encadenadas con múltiples casos
Este es un ejemplo de una sentenciaswitch secuencial con múltiples operaciones, donde, dependiendo del valor entero dado, se pueden recibir diferentes resultados. Esto demuestra que el algoritmo correrá en el orden en que se coloquen las declaracionescase, y que no tiene que ser numéricamente secuencial. En JavaScript, también es posible combinar definiciones con valores"string" dentro de estas declaracionescase.
var foo = 1;var output = "Salida: ";switch (foo) { case 10: output += "¿Y "; case 1: output += "Cuál "; output += "Es "; case 2: output += "Tu "; case 3: output += "Nombre"; case 4: output += "?"; console.log(output); break; case 5: output += "!"; console.log(output); break; default: console.log("Por favor, selecciona un valor del 1 al 6.");}La salida (output) de este ejemplo:
| Value | Log text |
|---|---|
| foo es NaN o no es 1, 2, 3, 4, 5 ni 10 | Por favor, selecciona un valor del 1 al 6. |
| 10 | Salida: ¿Y Cuál Es Tu Nombre? |
| 1 | Salida: Cuál Es Tu Nombre? |
| 2 | Salida: Tu Nombre? |
| 3 | Salida: Nombre? |
| 4 | Salida: ? |
| 5 | Salida: ! |
Especificaciones
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-switch-statement> |