PÅÃkaz switch dokáže nahradit nÄkolik podmÃnÄných pÅÃkazů if.
Poskytuje pÅehlednÄjšà způsob, jak porovnat hodnotu s nÄkolika variantami.
Syntaxe
PÅÃkaz switch obsahuje jeden nebo vÃce bloků case a nepovinný blok default.
Vypadá to takto:
switch(x) {
case 'hodnota1': // if (x === 'hodnota1')
...
[break]
case 'hodnota2': // if (x === 'hodnota2')
...
[break]
default:
...
[break]
}
- Je ovÄÅena striktnà rovnost hodnoty
xs hodnotou z prvnÃhocase(tj.hodnota1), pak s druhouhodnota2, a tak dále. - Pokud je rovnost nalezena,
switchzaÄne vykonávat kód od odpovÃdajÃcÃhocaseaž do nejbližšÃhobreak(nebo do konce blokuswitch). - NenÃ-li nalezena žádná rovnost, je vykonán kód
default(pokud je uveden).
PÅÃklad
PÅÃklad pÅÃkazu switch (vykonaný kód je zvýraznÄn):
let a = 2 + 2;
switch (a) {
case 3:
alert( 'PÅÃliÅ¡ málo' );
break;
case 4:
alert( 'PÅesnÄ!' );
break;
case 5:
alert( 'PÅÃliÅ¡ mnoho' );
break;
default:
alert( "Takové hodnoty neznám" );
}
Zde switch zaÄne porovnávat a od prvnà varianty, kterou je 3. Porovnánà neuspÄje.
Pak 4. Tady je nalezena shoda, takže se zaÄne vykonávat kód obsažený v case 4 a skonÄà na nejbližšÃm break.
NenÃ-li pÅÃtomen pÅÃkaz break, spustà se kód v dalÅ¡Ãch case bez jakéhokoliv porovnánÃ.
PÅÃklad bez break:
let a = 2 + 2;
switch (a) {
case 3:
alert( 'PÅÃliÅ¡ málo' );
case 4:
alert( 'PÅesnÄ!' );
case 5:
alert( 'PÅÃliÅ¡ mnoho' );
default:
alert( "Takové hodnoty neznám" );
}
V uvedeném pÅÃkladu vidÃme sekvenÄnà vykonánà tÅà alertů:
alert( 'PÅesnÄ!' );
alert( 'PÅÃliÅ¡ mnoho' );
alert( "Takové hodnoty neznám" );
switch/case může být jakýkoli výrazJak switch, tak case dovolujà libovolné výrazy.
PÅÃklad:
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("toto se vykoná, protože +a je 1, což se rovná b+1");
break;
default:
alert("toto se nevykoná");
}
Zde +a dává 1, to se v case porovná s b + 1 a spustà se pÅÃsluÅ¡ný kód.
Seskupovánà âcaseâ
Je možné seskupit nÄkolik case variant, které majà mÃt stejný kód.
NapÅÃklad když chceme, aby se stejný kód spustil pro case 3 a case 5:
let a = 3;
switch (a) {
case 4:
alert('SprávnÄ!');
break;
case 3: // (*) dvÄ seskupené varianty
case 5:
alert('Å patnÄ!');
alert("ProÄ nenavÅ¡tÄvujete kurz matematiky?");
break;
default:
alert('Tento výsledek je divný. Opravdu.');
}
Nynà 3 a 5 zobrazà stejnou zprávu.
Schopnost âseskupovatâ varianty je vedlejšà efekt toho, jak switch/case funguje bez break. Zde provádÄnà case 3 zaÄne od Åádku (*) a projde pÅes case 5, protože tam nenà žádný break.
Na datovém typu záležÃ
ZdůrazÅujeme, že ovÄÅenà rovnosti je vždy striktnÃ. Aby se hodnoty rovnaly, musà být stejného typu.
Jako pÅÃklad posloužà tento kód:
let arg = prompt("Zadejte hodnotu");
switch (arg) {
case '0':
case '1':
alert( 'Jedna nebo nula' );
break;
case '2':
alert( 'DvÄ' );
break;
case 3:
alert( 'Toto se nikdy nevykoná!' );
break;
default:
alert( 'Neznámá hodnota' );
}
- Pro
0a1se spustà prvnÃalert. - Pro
2se spustà druhýalert. - Avšak pro
3je výsledkem pÅÃkazupromptÅetÄzec"3", který nenà striktnÄ roven===ÄÃslu3. Proto jsme procase 3zÃskali mrtvý kód! Spustà se variantadefault.
KomentáÅe
<code>, pro nÄkolik Åádků je obalte znaÄkou<pre>, pro vÃce než 10 Åádků vložte odkaz na pÃskoviÅ¡tÄ (plnkr, jsbin, codepenâ¦)