ÐонÑÑÑÑкÑÐ¸Ñ switch заменÑÐµÑ Ñобой ÑÑÐ°Ð·Ñ Ð½ÐµÑколÑко if.
Ðна пÑедÑÑавлÑÐµÑ Ñобой более наглÑднÑй ÑпоÑоб ÑÑавниÑÑ Ð²ÑÑажение ÑÑÐ°Ð·Ñ Ñ Ð½ÐµÑколÑкими ваÑианÑами.
СинÑакÑиÑ
ÐонÑÑÑÑкÑÐ¸Ñ switch Ð¸Ð¼ÐµÐµÑ Ð¾Ð´Ð¸Ð½ или более блок case и необÑзаÑелÑнÑй блок default.
ÐÑглÑÐ´Ð¸Ñ Ð¾Ð½Ð° Ñак:
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
- ÐеÑеменнаÑ
xпÑовеÑÑеÑÑÑ Ð½Ð° ÑÑÑогое ÑавенÑÑво пеÑÐ²Ð¾Ð¼Ñ Ð·Ð½Ð°ÑениÑvalue1, заÑем вÑоÑомÑvalue2и Ñак далее. - ÐÑли ÑооÑвеÑÑÑвие ÑÑÑановлено â
switchнаÑÐ¸Ð½Ð°ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¾Ñ ÑооÑвеÑÑÑвÑÑÑей диÑекÑивÑcaseи далее, до ближайÑегоbreak(или до конÑаswitch). - ÐÑли ни один
caseне Ñовпал â вÑполнÑеÑÑÑ (еÑли еÑÑÑ) ваÑианÑdefault.
ÐÑÐ¸Ð¼ÐµÑ ÑабоÑÑ
ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ switch (ÑÑабоÑавÑий код вÑделен):
let a = 2 + 2;
switch (a) {
case 3:
alert( 'ÐаловаÑо' );
break;
case 4:
alert( 'Ð ÑоÑкÑ!' );
break;
case 5:
alert( 'ÐеÑебоÑ' );
break;
default:
alert( "ÐÐµÑ ÑакиÑ
знаÑений" );
}
ÐдеÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ switch поÑледоваÑелÑно ÑÑÐ°Ð²Ð½Ð¸Ñ a Ñо вÑеми ваÑианÑами из case.
СнаÑала 3, заÑем â Ñак как Ð½ÐµÑ ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ â 4. Совпадение найдено, бÑÐ´ÐµÑ Ð²Ñполнен ÑÑÐ¾Ñ Ð²Ð°ÑианÑ, Ñо ÑÑÑоки alert( 'Ð ÑоÑкÑ!' ) и далее, до ближайÑего break, коÑоÑÑй пÑеÑвÑÑ Ð²Ñполнение.
ÐÑли break неÑ, Ñо вÑполнение пойдÑÑ Ð½Ð¸Ð¶Ðµ по ÑледÑÑÑим case, пÑи ÑÑом оÑÑалÑнÑе пÑовеÑки игноÑиÑÑÑÑÑÑ.
ÐÑÐ¸Ð¼ÐµÑ Ð±ÐµÐ· break:
let a = 2 + 2;
switch (a) {
case 3:
alert( 'ÐаловаÑо' );
case 4:
alert( 'Ð ÑоÑкÑ!' );
case 5:
alert( 'ÐеÑебоÑ' );
default:
alert( "ÐÐµÑ ÑакиÑ
знаÑений" );
}
РпÑимеÑе вÑÑе поÑледоваÑелÑно вÑполнÑÑÑÑ ÑÑи alert:
alert( 'Ð ÑоÑкÑ!' );
alert( 'ÐеÑебоÑ' );
alert( "ÐÐµÑ ÑакиÑ
знаÑений" );
switch/caseÐ switch и case допÑÑкаÑÑ Ð»Ñбое вÑÑажение в каÑеÑÑве аÑгÑменÑа.
ÐапÑимеÑ:
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("ÐÑполниÑÑÑ, Ñ.к. знаÑением +a бÑÐ´ÐµÑ 1, ÑÑо в ÑоÑноÑÑи Ñавно b+1");
break;
default:
alert("ÐÑо не вÑполниÑÑÑ");
}
Ð ÑÑом пÑимеÑе вÑÑажение +a вÑÑиÑлÑеÑÑÑ Ð² 1, ÑÑо ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð²ÑÑажением b + 1 в case, и ÑледоваÑелÑно, код в ÑÑом блоке бÑÐ´ÐµÑ Ð²Ñполнен.
ÐÑÑппиÑовка «case»
ÐеÑколÑко ваÑианÑов case, иÑполÑзÑÑÑиÑ
один код, можно гÑÑппиÑоваÑÑ.
ÐÐ»Ñ Ð¿ÑимеÑа, вÑполним один и ÑÐ¾Ñ Ð¶Ðµ код Ð´Ð»Ñ case 3 и case 5, ÑгÑÑппиÑовав иÑ
:
let a = 3;
switch (a) {
case 4:
alert('ÐÑавилÑно!');
break;
case 3: // (*) гÑÑппиÑÑем оба case
case 5:
alert('ÐепÑавилÑно!');
alert("ÐÐ¾Ð¶ÐµÑ Ð²Ð°Ð¼ поÑеÑиÑÑ ÑÑок маÑемаÑики?");
break;
default:
alert('РезÑлÑÑÐ°Ñ Ð²ÑглÑÐ´Ð¸Ñ ÑÑÑанноваÑо. ЧеÑÑно.');
}
ТепеÑÑ Ð¾Ð±Ð° ваÑианÑа 3 и 5 вÑводÑÑ Ð¾Ð´Ð½Ð¾ ÑообÑение.
ÐозможноÑÑÑ Ð³ÑÑппиÑоваÑÑ case â ÑÑо побоÑнÑй ÑÑÑÐµÐºÑ Ñого, как switch/case ÑабоÑÐ°ÐµÑ Ð±ÐµÐ· break. ÐдеÑÑ Ð²Ñполнение case 3 наÑинаеÑÑÑ Ñо ÑÑÑоки (*) и пÑодолжаеÑÑÑ Ð² case 5, поÑÐ¾Ð¼Ñ ÑÑо оÑÑÑÑÑÑвÑÐµÑ break.
Тип Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
ÐÑжно оÑмеÑиÑÑ, ÑÑо пÑовеÑка на ÑавенÑÑво вÑегда ÑÑÑогаÑ. ÐнаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñипа, ÑÑÐ¾Ð±Ñ Ð²ÑполнÑлоÑÑ ÑавенÑÑво.
ÐÐ»Ñ Ð¿ÑимеÑа, давайÑе ÑаÑÑмоÑÑим ÑледÑÑÑий код:
let arg = prompt("ÐведиÑе ÑиÑло?");
switch (arg) {
case '0':
case '1':
alert( 'Ðдин или нолÑ' );
break;
case '2':
alert( 'Ðва' );
break;
case 3:
alert( 'Ðикогда не вÑполниÑÑÑ!' );
break;
default:
alert( 'ÐеизвеÑÑное знаÑение' );
}
- ÐлÑ
'0'и'1'вÑполниÑÑÑ Ð¿ÐµÑвÑйalert. - ÐлÑ
'2'â вÑоÑойalert. - Ðо длÑ
3, ÑезÑлÑÑÐ°Ñ Ð²ÑполнениÑpromptбÑÐ´ÐµÑ ÑÑÑока"3", коÑоÑÐ°Ñ Ð½Ðµ ÑооÑвеÑÑÑвÑÐµÑ ÑÑÑÐ¾Ð³Ð¾Ð¼Ñ ÑавенÑÑвÑ===Ñ ÑиÑлом3. Таким обÑазом, Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ «мÑÑÑвÑй код» вcase 3! ÐÑполниÑÑÑ Ð²Ð°ÑианÑdefault.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)