A JavaScriptben az elágazás mellett a switch utasítással is futtathatsz feltételesen kódot.
Akkor használjuk, ha egyetlen változót több lehetőséggel kell összehasonlítani.
Az összehasonlítás szigorú egyenlőség (===) vizsgálatával történik, lásd az összehasonlítás fogalmat.
Egy x változó esetén a JavaScript switch utasításának szintaxisa a következő.
switch (x) {
case option1:
// code that is executed when "x === option1" is true
break;
case option2:
// code that is executed when "x === option2" is true
break;
default:
// code that is executed when x does not equal any of the
// options
}
A default eset elhagyható; akkor használjuk, ha olyan kódot szeretnél futtatni, amikor a változó egyik másik lehetőséggel sem egyezik.
A fenti break utasításokra azért van szükség, mert a JavaScriptben alapértelmezés szerint minden eset „átesik” a következőre.
Ez azt jelenti, hogy break utasítás nélkül az elsőként egyező lehetőség utáni esetek teljes kódja is lefutna, pedig x nem egyezett azokkal a lehetőségekkel.
Ez az „alapértelmezett átesés” gyakori buktató, amikor switch-et használsz JavaScriptben.
Egy függvényen belül a break helyett return-t is használhatsz, hogy elkerüld ezt a problémát.
Az átesés viselkedését a javadra is fordíthatod, ha ugyanazt a kódot szeretnéd több esetre alkalmazni. Erre példát az MDN dokumentációjában találsz.
Alapértelmezés szerint a különböző case esetekben lévő változók ugyanazon a scope-on osztoznak.
Ez váratlan viselkedéshez vezethet.
Ha például egy esetet kimásolsz és beillesztesz, könnyen előfordulhat, hogy két esetben is lesz egy let message deklaráció, ami hibát okoz; lásd az MDN dokumentációját.
A közös scope miatti problémák elkerülésére minden esethez külön scope-ot hozhatsz létre úgy, hogy kapcsos zárójelekkel kódblokkot adsz az egyes esetekhez.
switch (x) {
case option1: {
// Variables declared here are contained to this case.
break;
}
case option2: {
// ...
break;
}
default: {
// ...
}
}
Az x változó helyett kifejezést is használhatsz.
Ezt a kifejezést a switch utasítás elején egyszer értékeli ki a program, és az eredményt az esetekkel hasonlítja össze.
Gyakori felhasználása a „típus szerinti switch”, amely a változó típusától függően más-más kódot futtat.
switch (typeof x) {
case 'string':
// code that is executed when x is a string
break;
case 'number':
// code that is executed when x is a number
break;
default:
// code that is executed when x has some other type
}
A lehetőségek maguk is lehetnek kifejezések.