2010-07-12 12 views

Antwort

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

Hinweis: Deshalb können Sie diese leicht wie folgt funktioniert „anderen“ nicht erforderlich ist, zeige ich nur, dass Sie auch Fälle mit Standard-Stack kann.

3

JavaScript funktioniert nicht so. Machen Sie es wie folgt aus:

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

Wie in C, JavaScript ist case Klausel Kaskade wird.

+0

Duh! Vielen Dank. Ich weiß nicht, wie ich daran nicht gedacht habe. bearbeiten - vielen Dank! Tut mir leid, dass ich ein Idiot bin. – Greg

1

Das Problem mit Ihrem Beispiel ist, dass der Ausdruck ('foo' || 'bar')-'foo' auswertet, und deshalb wird es nur passen, wenn i'foo' ist, und nie, wenn i'bar' ist. Der Operator || erzeugt den Wert seines ersten Operanden, wenn der erste Operand truthy ist. Andernfalls erzeugt es den Wert des zweiten Operanden. Eine nicht leere Zeichenfolge ist immer truthy, und deshalb gibt Ihr Ausdruck zurück.

In JavaScript fällt jedoch jede case in den nächsten Fall durch, es sei denn, Sie unterbrechen explizit den Fluss mit einer break oder return.

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

Vom official Mozilla Developer Center docs, verwenden Sie mehrere Fälle wie so:

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

Oder wenn für eine IE-Lösung suchen würden Sie die JScript docs for switch verwenden, die als „Labels“ Fall Bedingungen beziehen und es heißt:

Mehrere Etikettenblöcke werden ausgeführt, wenn eine Break-Anweisung nicht verwendet wird.

Effektiv sagen beide Dokumentationssätze dasselbe über das Zusammensetzen mehrerer Fälle.

1

Würde etwas entlang dieser Linie funktionieren?

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

Sie haben für jeden Wert getrennte Fälle einzustellen.

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

Code verwenden, werden Sie nur die Warnung erhalten, wenn i true ergibt, da eine Zeichenfolge, die auch nicht leer ist wahr ausgewertet.