Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

switch

Die switch Anweisung wertet einen Ausdruck 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.

Beschreibung

Ein switch Statement wertet als erstes den Ausdruck aus. Danach wird nach der ersten case Klausel gesucht, die zu dem gleichen Wert ausgewertet wird wie der erste Ausdruck im switch (mit striktem Vergleich, === ) und springt im Kontrollfluss zu der Klausel und führt die dort geschriebenen Statements aus. (Bei mehrfachen Übereinstimmungen springt das Programm zu der ersten gefundenen Klausel, auch wenn die gefunden Klausen nicht gleich sind.) Falls keine übereinstimmende case Klausel gefunden wird, sucht das Programm die optionale default Klausel und führt, wenn diese Klausel existiert, die Anweisungen in der Klausel aus. Wenn keine default Klausel vorhanden ist, wird das Programm nach dem switch Statement fortgesetzt. Konventionell ist die default Klausel die letzte Klausel, das muss aber nicht so sein.

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, unabhä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 Kommentar
ECMAScript 3rd Edition (ECMA-262) Standard Initiale 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  
ECMAScript 2017 Draft (ECMA-262)
Die Definition von 'switch statement' in dieser Spezifikation.
Entwurf  

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: schlagi123, Elyasin
 Zuletzt aktualisiert von: schlagi123,