Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die switch-Anweisung wertet einen Ausdruck aus, vergleicht den Wert des Ausdrucks mit einer Reihe von case-Klauseln und führt Anweisungen nach der ersten case-Klausel mit passendem Wert aus, bis eine break-Anweisung erreicht wird. Die default-Klausel einer switch-Anweisung wird angesprungen, wenn keine case-Klausel den Wert des Ausdrucks trifft.
Ein Ausdruck, dessen Ergebnis mit jeder case-Klausel verglichen wird.
caseExpressionN OptionalEine case-Klausel, die verwendet wird, um gegen den expression zu vergleichen. Wenn der Wert von expression mit dem Wert eines caseExpressionN übereinstimmt, beginnt die Ausführung ab der ersten Anweisung nach dieser case-Klausel bis entweder zum Ende der switch-Anweisung oder der ersten break, die auftritt.
default OptionalEine default-Klausel; wenn vorhanden, wird diese Klausel ausgeführt, wenn der Wert von expression mit keiner der case-Klauseln übereinstimmt. Eine switch-Anweisung kann nur eine default-Klausel haben.
Eine switch-Anweisung wertet zunächst ihren Ausdruck aus. Dann sucht sie die erste case-Klausel, deren Ausdruck denselben Wert wie das Ergebnis des Eingabeausdrucks hat (unter Verwendung des strikten Gleichheitsvergleichs) und überträgt die Kontrolle auf diese Klausel, wobei alle Anweisungen nach dieser Klausel ausgeführt werden.
Die Klauselausdrücke werden nur bei Bedarf ausgewertet — wenn bereits eine Übereinstimmung gefunden wurde, werden nachfolgende case-Klauselausdrücke nicht ausgewertet, selbst wenn sie durch fall-through besucht werden.
Wenn keine passende case-Klausel gefunden wird, sucht das Programm nach der optionalen default-Klausel und überträgt, falls gefunden, die Kontrolle auf diese Klausel und führt die Anweisungen nach dieser Klausel aus. Wird keine default-Klausel gefunden, fährt das Programm mit der Ausführung an der Anweisung nach dem Ende von switch fort. Üblicherweise ist die default-Klausel die letzte Klausel, aber das muss nicht so sein. Eine switch-Anweisung darf nur eine default-Klausel haben; mehrere default-Klauseln führen zu einem SyntaxError.
Sie können die break-Anweisung innerhalb einer switch-Anweisungsgruppe verwenden, um frühzeitig auszubrechen, oft wenn alle Anweisungen zwischen zwei case-Klauseln ausgeführt wurden. Die Ausführung erfolgt bei der ersten Anweisung nach switch.
Wenn break weggelassen wird, wird die Ausführung zur nächsten case-Klausel fortgesetzt, sogar zur default-Klausel, unabhängig davon, ob der Wert des Ausdrucks dieser Klausel entspricht. Dieses Verhalten wird "fall-through" genannt.
In einem passenden Kontext haben auch andere Steuerflussanweisungen die Wirkung, aus der switch-Anweisung auszubrechen. Zum Beispiel, wenn die switch-Anweisung in einer Funktion enthalten ist, beendet eine return-Anweisung die Ausführung des Funktionskörpers und damit die switch-Anweisung. Wenn die switch-Anweisung in einer Schleife enthalten ist, stoppt eine continue-Anweisung die switch-Anweisung und springt zur nächsten Iteration der Schleife.
Die case- und default-Klauseln sind wie Labels: Sie kennzeichnen mögliche Stellen, zu denen der Kontrollfluss springen kann. Sie erzeugen jedoch keine lexikalischen Bereiche selbst (sie brechen auch nicht automatisch ab — wie oben gezeigt). Zum Beispiel:
Dieses Beispiel wird den Fehler "Uncaught SyntaxError: Identifier 'message' has already been declared" ausgeben, weil die erste const message = 'hello'; mit der zweiten const message = 'hi'; Deklaration in Konflikt steht, auch wenn sie sich in ihren eigenen separaten case-Klauseln befinden. Letztendlich liegt das daran, dass beide const-Deklarationen innerhalb desselben Blockbereichs stehen, der durch den switch-Körper erzeugt wird.
Um dies zu beheben, wickeln Sie die let- oder const-Deklarationen in einer case-Klausel in einen Block ein.
Dieser Code wird nun hello in der Konsole ausgeben, wie es sollte, ohne Fehler.
Im folgenden Beispiel, wenn expr zu Bananas ausgewertet wird, vergleicht das Programm den Wert mit der case 'Bananas' und führt die zugehörige Anweisung aus. Wenn break erreicht wird, bricht das Programm aus dem switch aus und führt die Anweisung nach switch aus. Wenn break weggelassen würde, würde auch die Anweisung für case 'Cherries' ausgeführt werden.
Wenn keine Übereinstimmung gefunden wird, beginnt die Ausführung bei der default-Klausel und führt alle Anweisungen danach aus.
Es funktioniert auch, wenn Sie default vor allen anderen case-Klauseln setzen.
Diese Methode nutzt die Tatsache aus, dass, wenn unter einer case-Klausel kein break steht, die Ausführung zur nächsten case-Klausel fortgesetzt wird, unabhängig davon, ob diese case die Kriterien erfüllt.
Das Folgende ist ein Beispiel für eine Einzeloperation sequenzieller case-Anweisung, bei der vier verschiedene Werte genau dasselbe tun.
Das Folgende ist ein Beispiel für eine Mehrfachoperation sequenzielle case-Klausel, bei der, abhängig von der bereitgestellten Ganzzahl, unterschiedliche Ausgaben erfolgen. Dies zeigt Ihnen, dass es in der Reihenfolge durchlaufen wird, in der Sie die case-Klauseln setzen, und dass es nicht numerisch sequentiell sein muss. In JavaScript können Sie sogar String-Definitionen in diese case-Anweisungen mischen.
Die Ausgabe dieses Beispiels:
| foo ist NaN oder nicht 1, 2, 3, 4, 5, oder 0 | Bitte wählen Sie eine Zahl von 0 bis 5! |
| 0 | Ausgabe: So What Is Your Name? |
| 1 | Ausgabe: What Is Your Name? |
| 2 | Ausgabe: Your Name? |
| 3 | Ausgabe: Name? |
| 4 | Ausgabe: ? |
| 5 | Ausgabe: ! |
Sie finden sich oft in einer Reihe von if...else Vergleichen wieder.
Dieses Muster führt keine Sequenz von ===-Vergleichen durch, kann aber dennoch in eine switch-Konstruktion umgewandelt werden.
Das switch (true)-Muster als Alternative zu if...else ist besonders nützlich, wenn Sie das Fall-through-Verhalten nutzen möchten.
| ECMAScript® 2027 Language Specification # sec-switch-statement |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.