[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Statements/switch [Back]  [Original]

switch - JavaScript | MDN

Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.

View in English Always switch to English

switch

Baseline Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since julio de 2015.

La declaracin switch evala una expresin, comparando el valor de esa expresin con una instancia case, y ejecuta declaraciones asociadas a ese case, as como las declaraciones en los case que siguen.

In this article

Syntaxis

switch (expresin) {
  case valor1:
    //Declaraciones ejecutadas cuando el resultado de expresin coincide con el valor1
    [break;]
  case valor2:
    //Declaraciones ejecutadas cuando el resultado de expresin coincide con el valor2
    [break;]
  ...
  case valorN:
    //Declaraciones ejecutadas cuando el resultado de expresin coincide con valorN
    [break;]
  default:
    //Declaraciones ejecutadas cuando ninguno de los valores coincide con el valor de la expresin
    [break;]
}
expresin

Es una expresin que es comparada con el valor de cada instancia case.

case valorN

Una instancia case valorN es usada para ser comparada con la expresin. Si la expresin coincide con el valorN, las declaraciones dentro de la instancia case se ejecutan hasta que se encuentre el final de la declaracin switch o hasta encontrar una interrupcin break.

default

Una instancia default, cuando es declarada, es ejecutada si el valor de la expresin no coincide con cualquiera de las otras instancias case valorN.

Descripcin

Si ocurre una coincidencia, el programa ejecuta las declaraciones asociadas correspondientes. Si la expresin coincide con mltiples entradas, la primera ser la seleccionada, incluso si las maysculas son tenidas en cuenta.

El programa primero busca la primer instacia case cuya expresin se evala con el mismo valor de la expresin de entrada (usando comparacin estricta, ===) y luego transfiere el control a esa clusula, ejecutando las declaraciones asociadas. Si no se encuentra una clusula de case coincidente, el programa busca la clusula default opcional, y si se encuentra, transfiere el control a esa instancia, ejecutando las declaraciones asociadas. Si no se encuentra una instancia default el programa contina la ejecucin en la instruccin siguiente al final del switch. Por convencin, la instancia default es la ltima clusula, pero no tiene que ser as.

La declaracin break es opcional y est asociada con cada etiqueta de case y asegura que el programa salga del switch una vez que se ejecute la instruccin coincidente y contine la ejecucin en la instruccin siguiente. Si se omite el break el programa contina la ejecucin en la siguiente instruccin en la declaracin de switch .

Ejemplos

Usando switch

En el siguiente ejemplo, si expresin se resuelve a "Platanos", el algoritmo compara el valor con el case "Platanos" y ejecuta la declaracin asociada. Cuando se encuentra un break, el programa sale del condicional switch y ejecuta la declaracin que lo procede. Si se omite el break, el case "Cerezas" tambin es ejecutado.

js
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 ms que te quisiera consultar?");

Qu pasa si olvido un break?

Si olvidas un break, el script se ejecutar desde donde se cumple la condicin y ejecutar el siguiente case independientemente si esta condicin se cumple o no. Ver el siguiente ejemplo:

js
var foo = 0;
switch (foo) {
  case -1:
    console.log("1 negativo");
    break;
  case 0: // foo es 0, por lo tanto se cumple la condicin y se ejecutara el siguiente bloque
    console.log(0);
  // NOTA: el "break" olvidado debera estar aqu
  case 1: // No hay sentencia "break" en el 'case 0:', por lo tanto este caso tambin 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 instancia default en caso de no encontrar una coincidencia:

js
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 el case 1: a continuacin de default, y al no haber un break de por medio, veremos que la declaracin del case 1: ser ejecutada, apareciendo el resultado 1 en el log de consola.

Metodos para casos con mltiple criterio

La fuente de esta tcnica esta aqu:

Switch statement multiple cases in JavaScript (Stack Overflow)

Operacin nica con mltiples casos

Este mtodo toma ventaja del hecho de que, si no hay un break debajo de una declaracin case, continuar la ejecucin hasta el siguiente case, ignorando si en dicho caso se cumple o no el criterio indicado. Comprobar en la seccin Qu pasa si olvido un break?

Este es un ejemplo de operacin nica con sentencia switch secuencial, donde cuatro valores diferentes se comportan exactamente de la misma manera:

js
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 mltiples casos

Este es un ejemplo de una sentencia switch secuencial con mltiples 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 declaraciones case, y que no tiene que ser numricamente secuencial. En JavaScript, tambin es posible combinar definiciones con valores "string" dentro de estas declaraciones case.

js
var foo = 1;
var output = "Salida: ";
switch (foo) {
  case 10:
    output += "Y ";
  case 1:
    output += "Cul ";
    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 Cul Es Tu Nombre?
1 Salida: Cul Es Tu Nombre?
2 Salida: Tu Nombre?
3 Salida: Nombre?
4 Salida: ?
5 Salida: !

Especificaciones

Specification
ECMAScript 2027 LanguageSpecification
# sec-switch-statement

Compatibilidad con navegadores

Ver tambin


Web Proxy Viewer  |  New URL  |  Original Page