2010-07-12 18 views

Respuesta

13
switch(i){ 
    case 'foo': 
    case 'bar': 
    alert('foo or bar'); 
    break; 
    case 'other': 
    default: 
    alert('other'); 
} 

Nota: "otro" no es necesario, sólo estoy demostrando que se pueden apilar los casos de default.

3

JavaScript no funciona de esa manera. Hacerlo de esta manera:

switch(i){ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 

Al igual que en C, cláusula de JavaScript case caerá en cascada.

+0

Duh! Gracias. No sé cómo no pensé en eso. editar - ¡gracias a todos! Perdón por ser un idiota. – Greg

1

El problema con el ejemplo es que la expresión se evalúa como ('foo' || 'bar')'foo', y por lo tanto sólo igualará cuando i es 'foo', y nunca cuando i es 'bar'.

El operador || produce el valor de su primer operando si el primer operando es verdadero. De lo contrario, produce el valor del segundo operando. Una cadena no vacía siempre es cierta, y es por eso que su expresión está retornando 'foo'.

Sin embargo, en JavaScript cada case cae en el siguiente caso a menos que interrumpa explícitamente el flujo con break o return. Por lo tanto usted puede fácilmente hacer que funcione de la siguiente manera:

switch(i) { 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 
1
switch(i){ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 
5

Desde el official Mozilla Developer Center docs, utiliza varios casos de este modo:

// multiple cases:  

    case "Mangoes": 
    case "Papayas": 
     document.write("Mangoes and papayas are $2.79 a pound.<br>"); 
     break; 
    default: 
     document.write("Sorry, we are out of " + expr + ".<br>"); 
} 

O si busca una solución IE se usaría el JScript docs for switch que se refieren al caso condiciones como "etiquetas" y afirma:

Los bloques de etiquetas múltiples se ejecutan si no se utiliza una declaración de interrupción .

Efectivamente, ambos conjuntos de documentación dicen lo mismo acerca de poner varias cajas juntas.

1

¿Funcionaría algo en esta línea?

switch(i){ 
    case ('foo'): 
    case ('bar'): 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 
1
 
switch(i) 
{ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
     break; 
} 
1

usted tiene que fijar casos separados para cada valor.

switch(i) 
{ 
    case 'foo': 
    case 'bar': 
     alert('foo or bar'); 
     break; 
    default: 
     alert('not foo or bar'); 
} 

Usando el código, sólo obtendrá la alerta si i como resultado true, ya que una cadena que no está vacío también se evalúa como verdadera.

Cuestiones relacionadas