ÐонÑÑÑÑкÑÑÑ switch може замÑниÑи кÑлÑка if.
Ðона Ð´Ð°Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²ÑÑÑÑ Ð±ÑлÑÑ Ð½Ð°Ð¾Ñного ÑпоÑÐ¾Ð±Ñ Ð¿Ð¾ÑÑвнÑÐ½Ð½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð²ÑдÑÐ°Ð·Ñ Ð· кÑлÑкома ваÑÑанÑами.
СинÑакÑиÑ
ÐонÑÑÑÑкÑÑÑ switch Ð¼Ð°Ñ Ð¾Ð´Ð¸Ð½ або бÑлÑÑе case блокÑв Ñа необовâÑзковий блок default.
Ðона виглÑÐ´Ð°Ñ Ñак:
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
- ÐнаÑÐµÐ½Ð½Ñ Ð·Ð¼ÑнноÑ
xпеÑевÑÑÑÑÑÑÑÑ Ð½Ð° ÑÑÑÐ¾Ð³Ñ ÑÑвнÑÑÑÑ (=== ) знаÑÐµÐ½Ð½Ñ Ñз пеÑÑого блокÑcase(Ñке доÑÑвнÑÑ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. Це не вÑдповÑÐ´Ð°Ñ a.
ÐоÑÑм з дÑÑгим, Ñкий доÑÑвнÑÑ 4. Цей ваÑÑÐ°Ð½Ñ Ð²ÑдповÑÐ´Ð°Ñ a, Ñаким Ñином бÑде виконано код з case 4 до найближÑого 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â¦)