Eine switch
Anweisung kann mehrere if
Prüfungen ersetzen.
Es bietet eine aussagekräftigere Möglichkeit, einen Wert mit mehreren Varianten zu vergleichen.
Der switch
verfügt über einen oder mehrere case
Blöcke und einen optionalen Standardwert.
Es sieht so aus:
switch(x) { case 'value1': // if (x === 'value1') ... [brechen] case 'value2': // if (x === 'value2') ... [brechen] Standard: ... [brechen] }
Der Wert von x
wird auf strikte Gleichheit mit dem Wert vom ersten case
(d. h. value1
), dann bis zum zweiten ( value2
) und so weiter überprüft.
Wenn die Gleichheit gefunden wird, beginnt switch
mit der Ausführung des Codes beginnend mit dem entsprechenden case
bis zur nächsten break
(oder bis zum Ende von switch
).
Wenn kein Fall übereinstimmt, wird der default
ausgeführt (falls vorhanden).
Ein Beispiel für switch
(der ausgeführte Code ist hervorgehoben):
sei a = 2 + 2; Schalter (a) { Fall 3: alarm( 'Zu klein' ); brechen; Fall 4: alarm( 'Genau!' ); brechen; Fall 5: alarm( 'Zu groß' ); brechen; Standard: alarm( "Ich kenne solche Werte nicht" ); }
Hier beginnt der switch
mit dem Vergleich von a
aus der ersten case
, also 3
. Das Match schlägt fehl.
Dann 4
. Das ist eine Übereinstimmung, daher beginnt die Ausführung von case 4
bis zum nächsten break
.
Erfolgt keine break
, wird die Ausführung ohne Prüfung mit dem nächsten case
fortgesetzt.
Ein Beispiel ohne break
:
sei a = 2 + 2; Schalter (a) { Fall 3: alarm( 'Zu klein' ); Fall 4: alarm( 'Genau!' ); Fall 5: alarm( 'Zu groß' ); Standard: alarm( "Ich kenne solche Werte nicht" ); }
Im obigen Beispiel sehen wir die sequentielle Ausführung von drei alert
:
alarm( 'Genau!' ); alarm( 'Zu groß' ); alarm( "Ich kenne solche Werte nicht" );
Jeder Ausdruck kann ein switch/case
-Argument sein
Sowohl switch
als auch case
erlauben beliebige Ausdrücke.
Zum Beispiel:
sei a = „1“; sei b = 0; Schalter (+a) { Fall b + 1: alarm("dies läuft, da +a 1 ist, entspricht genau b+1"); brechen; Standard: alarm("dies läuft nicht"); }
Hier ergibt +a
1
, das wird im case
mit b + 1
verglichen und der entsprechende Code wird ausgeführt.
Mehrere case
mit demselben Code können gruppiert werden.
Wenn wir beispielsweise möchten, dass derselbe Code für case 3
und case 5
ausgeführt wird:
sei a = 3; Schalter (a) { Fall 4: alarm('Richtig!'); brechen; Fall 3: // (*) gruppierte zwei Fälle Fall 5: alarm('Falsch!'); alarm("Warum nimmst du nicht an einem Mathekurs teil?"); brechen; Standard: Alert('Das Ergebnis ist seltsam. Wirklich.'); }
Jetzt zeigen sowohl 3
als auch 5
die gleiche Meldung.
Die Möglichkeit, Fälle zu „gruppieren“, ist ein Nebeneffekt der Funktionsweise von switch/case
ohne break
. Hier beginnt die Ausführung von case 3
in der Zeile (*)
und geht durch case 5
, da es kein break
gibt.
Wir möchten betonen, dass die Gleichheitsprüfung immer streng ist. Damit die Werte übereinstimmen, müssen sie vom gleichen Typ sein.
Betrachten wir zum Beispiel den Code:
let arg = prompt("Geben Sie einen Wert ein?"); switch (arg) { Fall '0': Fall '1': alarm( 'Eins oder Null' ); brechen; Fall '2': alarm( 'Zwei' ); brechen; Fall 3: alarm( 'Niemals ausgeführt!' ); brechen; Standard: alarm( 'Ein unbekannter Wert' ); }
Für 0
, 1
wird die erste alert
ausgeführt.
Für 2
läuft die zweite alert
.
Aber für 3
ist das Ergebnis der prompt
eine Zeichenfolge "3"
, die nicht genau ===
der Zahl 3
entspricht. Wir haben also im case 3
einen toten Code! Die default
wird ausgeführt.
Wichtigkeit: 5
Schreiben Sie den Code mit if..else
der dem folgenden switch
entsprechen würde:
Schalter (Browser) { Fall 'Edge': alarm( "Du hast die Nase vorn!" ); brechen; Gehäuse 'Chrome': Fall 'Firefox': Fall 'Safari': Fall 'Opera': Alert( 'Okay, wir unterstützen auch diese Browser' ); brechen; Standard: Alert( 'Wir hoffen, dass diese Seite in Ordnung aussieht!' ); }
Um die Funktionalität von switch
genau abzugleichen, muss das if
einen strikten Vergleich '==='
verwenden.
Für bestimmte Zeichenfolgen funktioniert jedoch auch ein einfaches '=='
.
if(browser == 'Edge') { alarm("Du hast die Nase vorn!"); } else if (browser == 'Chrome' || Browser == 'Firefox' || Browser == 'Safari' || browser == 'Opera') { Alert( 'Okay, wir unterstützen auch diese Browser' ); } anders { Alert( 'Wir hoffen, dass diese Seite in Ordnung aussieht!' ); }
Bitte beachten Sie: Der browser == 'Chrome' || browser == 'Firefox' …
ist zur besseren Lesbarkeit in mehrere Zeilen aufgeteilt.
Aber das switch
ist immer noch klarer und aussagekräftiger.
Wichtigkeit: 4
Schreiben Sie den folgenden Code mit einer einzigen switch
Anweisung neu:
let a = +prompt('a?', ''); if (a == 0) { alarm( 0 ); } if (a == 1) { alarm( 1 ); } if (a == 2 || a == 3) { alarm( '2,3' ); }
Aus den ersten beiden Schecks werden zwei case
. Die dritte Prüfung gliedert sich in zwei Fälle:
let a = +prompt('a?', ''); Schalter (a) { Fall 0: alarm( 0 ); brechen; Fall 1: alarm( 1 ); brechen; Fall 2: Fall 3: alarm( '2,3' ); brechen; }
Bitte beachten Sie: Der break
unten ist nicht erforderlich. Aber wir haben es so gestaltet, dass der Code zukunftssicher ist.
In Zukunft besteht die Möglichkeit, dass wir einen weiteren case
hinzufügen möchten, zum Beispiel case 4
. Und wenn wir vergessen, davor eine Pause einzufügen, tritt am Ende von case 3
ein Fehler auf. Das ist also eine Art Selbstversicherung.