switch

von 1 Mitwirkenden:

Die switch Anweisung wertet einen Ausdruck (expression) aus. Diese Auswertung wird mit einer case-Klausel verglichen und (bei Übereinstimmung) die entsprechenden Anweisungen ausgeführt.

Syntax

switch (expression) {
  case value1:
    // Anweisungen werden ausgeführt,
    // falls expression mit value1 übereinstimmt
    [break;]
  case value2:
    // Anweisungen werden ausgeführt,
    // falls expression mit value2 übereinstimmt
    [break;]
  ...
  case valueN:
    // Anweisungen werden ausgeführt,
    // falls expression mit valueN übereinstimmt
    [break;]
  default:
    // Anweisungen werden ausgeführt,
    // falls keine der case-Klauseln mit expression übereinstimmt
    [break;]
}
expression
Ausdruck, der mit jeder case-Klausel verglichen wird.
case valueN
Der Wert einer case-Klausel wird mit expression verglichen.
statementsN
Anweisgungen werden ausgeführt falls expression mit entsprechender case-Klausel übereinstimmt.
statements_def
Anweisungen werden ausgeführt, falls es keine Übereinstimmung gab.

Beschreibung

Wenn eine Übereinstimmung gefunden wurde, dann führt das Programm die entsprechenden Anweisungen aus. Bei mehreren Übereinstimmungen wird die erste Übereinstimmung ausgewählt (selbst bei nicht übereinstimmenden case-Klauseln).

Das Programm sucht die erste case-Klausel, dessen ausgewerteter Ausdruck dem Wert der switch Anweisung entspricht (strikter Vergleich, ===). Bei Übereinstimmung macht das Programm ab dieser case-Klausel weiter und die entprechenden Anweisungen werden ausgeführt.
Falls keine übereinstimmende case-Klausel gefunden wird, dann sucht das Programm die default-Klausel und macht ab dieser Klausel weiter (, und die entsprechenden Anweisungen werden ausgeführt).
Falls es keine default-Klausel gibt, dann fährt das Programm mit der ersten Anweisungen fort, die dem Ende der switch Anweisung folgt.
Es ist üblich die default-Klausel als letzte Klausel zu schreiben, dies ist jedoch nicht zwingend.

Die optionale break Anweisung in jedem case Block weist das Programm an die switch Anweisung zu beenden. Das Programm macht dann mit der Anweisung weiter, die dem Ende der switch Anweisung folgt.
Wird die break Anweisung weggelassen, dann macht das Programm linear weiter; es wird die nächste Anweisung ausgeführt.

Beispiele

Verwendung von switch

Betrachten wir das folgende Beispiel. Falls expr zu "Bananas" ausgewertet wird, dann springt das Programm zu der case-Klausel "Bananas" und führt die entsprechenden Anweisungen aus. Die break Anweisung füht dazu, dass das Programm die switch Anweisung verlässt und mit der ersten Anweisung weitermacht, die dem Ende der switch Anweisung folgt.
Hätte man break weggelassen, dann hätte das Programm die Anweisungen der case-Klausel "Cherries" ausgeführt.

switch (expr) {
  case "Oranges":
    console.log("Oranges are $0.59 a pound.");
    break;
  case "Apples":
    console.log("Apples are $0.32 a pound.");
    break;
  case "Bananas":
    console.log("Bananas are $0.48 a pound.");
    break;
  case "Cherries":
    console.log("Cherries are $3.00 a pound.");
    break;
  case "Mangoes":
  case "Papayas":
    console.log("Mangoes and papayas are $2.79 a pound.");
    break;
  default:
    console.log("Sorry, we are out of " + expr + ".");
}

console.log("Is there anything else you'd like?");

Was passiert, falls man eine break Anweisung weglässt?

Falls man eine break Anweisung vergisst, dann führt das Programm sowohl die übereinstimmende case-Klausel als auch die darauf folgende case-Klausel aus, unabängig des Wertes der case-Klausel.

Im Allgemeinen fährt das Programm linear fort bis es auf eine break Anweisung stößt. Falls keine break Anweisung vorhanden ist, dann werden alle Anweisungen bis zum Ende der switch Anweisung ausgeführt.

var foo = 0;
switch (foo) {
  case -1:
    console.log('negative 1');
    break;
  case 0: // foo ist 0 - diese case-Klausel wird ausgeführt
    console.log(0)
    // HINWEIS: break Anweisung wurde hier weggelassen
  case 1: // Da keine break Anweisung in 'case 0:'
          // wird diese Klausel ebenfalls ausgeführt, 
          // obwohl der Wert nicht mit dem Ausdruck von 
          // switch übereinstimmt
    console.log(1);
    break; // das Programm verlässt die switch Anweisung.
           // 'case 2:' wird nicht ausgeführt
  case 2:
    console.log(2);
    break;
  default:
    console.log('default');
}

Techniken für case-Klauseln mit mehr als einem Kriterium

Die Quelle der erwähnten Methode kann hier aufgerufen werden (auf Englisch):
Switch statement multiple cases in JavaScript (Stack Overflow)

Mehrere case-Klauseln mit einer einfachen Anweisung

Diese Technik macht es sich zum Vorteil, dass das Programm einfach bei der nächsten case-Klausel weitermacht, wenn man die break Anweisung weglässt. Siehe Abschnitt "Was passiert, falls ich eine break Anweisung weglasse?"

Dieses Beispiel zeigt eine einfache Operation, die für alle entsprechenden case-Klauseln ausgeführt wird ('Cow', 'Giraffe', 'Dog', 'Pig').

var Animal = 'Giraffe';
switch (Animal) {
  case 'Cow':
  case 'Giraffe':
  case 'Dog':
  case 'Pig':
    console.log('This animal will go on Noah\'s Ark.');
    break;
  case 'Dinosaur':
  default:
    console.log('This animal will not.');
}

Mehrere case Klauseln mit mehreren Anweisungen

Dieses Beispiel zeigt wie mehrere Anweisungen verschiedener case-Klauseln ausgeführt werden.
Die case-Klauseln werden in geschriebener Reihenfolge ausgeführt, also unabhängig jeglicher Ordnung der Ausdrücke der case-Klauseln.

var foo = 1;
var output = 'Output: ';
switch (foo) {
  case 10:
    output += 'So ';
  case 1:
    output += 'What ';
    output += 'Is ';
  case 2:
    output += 'Your ';
  case 3:
    output += 'Name';
  case 4:
    output += '?';
    console.log(output);
    break;
  case 5:
    output += '!';
    console.log(output);
    break;
  default:
    console.log('Please pick a number from 0 to 6!');
}

Mögliche Ergebnisse:

Wert Ausgabe
10 Output: So What Is Your Name?
1 Output: What Is Your Name?
2 Output: Your Name?
3 Output: Name?
4 Output: ?
5 Output: !
Alle anderen Werte Please pick a number from 0 to 6!

Spezifikationen

Spezifikation Status Bemerkung
ECMAScript 3rd Edition Standard Ursprüngliche Definition.
Implementiert in JavaScript 1.2
ECMAScript 5.1 (ECMA-262)
Die Definition von 'switch statement' in dieser Spezifikation.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'switch statement' in dieser Spezifikation.
Standard  

Browserkompatibilität

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Unterstützt (Ja) (Ja) (Ja) (Ja) (Ja)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Unterstützt (Ja) (Ja) (Ja) (Ja) (Ja) (Ja)

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
Mitwirkende an dieser Seite: Elyasin
Zuletzt aktualisiert von: Elyasin,
Seitenleiste ausblenden