2010-07-12 7 views

Répondre

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

Note: « autre » n'est pas nécessaire, je suis juste montrer que vous pouvez empiler des cas avec défaut ainsi.

3

JavaScript ne fonctionne pas de cette façon. Faites comme ceci:

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

Comme en C, clause de JavaScript case sera en cascade.

+0

Duh! Merci. Je ne sais pas comment je n'ai pas pensé à ça. éditer - merci à tous! Désolé que je suis un idiot. – Greg

1

Le problème avec votre exemple est que l'expression ('foo' || 'bar') évalue à 'foo', et donc il ne correspond quand i est 'foo', et jamais quand i est 'bar'.

L'opérateur || produit la valeur de son premier opérande si le premier opérande est véridique. Sinon, il produit la valeur du second opérande. Une chaîne non vide est toujours vraie, et c'est pourquoi votre expression renvoie 'foo'.

Cependant, en JavaScript, chaque case passe dans le cas suivant à moins que vous n'interrompiez explicitement le flux avec break ou return. Par conséquent, vous pouvez facilement le faire fonctionner comme suit:

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

De l'official Mozilla Developer Center docs, utilisez plusieurs cas comme ceci:

// 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>"); 
} 

Ou si la recherche d'une solution IE vous pouvez utiliser la JScript docs for switch qui se réfèrent au cas des conditions comme des « étiquettes » et déclare:

plusieurs blocs d'étiquettes sont exécutés si une instruction de rupture n'est pas utilisée.

Effectivement les deux ensembles de documentation disent la même chose à propos de la mise en cas multiples.

1

Quelque chose le long de cette ligne fonctionnerait-il?

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

Vous devez définir des cas distincts pour chaque valeur.

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

En utilisant votre code, vous obtenez seulement l'alerte si i la valeur TRUE, car une chaîne non vide évalue également vrai.

Questions connexes