Конструкція 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 (код який буде виконаний виділено):
Тут switch починає порівнювати a з першим варіантом із case, який дорівнює 3. Це не відповідає a.
Потім з другим, який дорівнює 4. Цей варіант відповідає a, таким чином буде виконано код з case 4 до найближчого break.
Якщо break відсутній, то буде продовжено виконання коду наступних блоків case без перевірок.
Приклад без break:
В прикладі вище ми бачимо послідовне виконання трьох alert:
alert( 'Точнісінько!' );
alert( 'Забагато' );
alert( 'Я не знаю таких значень' );
switch/caseОбидва switch та case допускають будь-який вираз в якості аргументу.
Наприклад:
Тут значення виразу +a буде 1, що збігається з значенням виразу b + 1 із блоку case, таким чином код із цього блоку буде виконано.
Групування “case”
Кілька варіантів блоку case, які використовують однаковий код, можуть бути згруповані.
Наприклад, якщо ми бажаємо виконати один і той самий код для case 3 та case 5:
Тепер обидва варіанти 3 та 5 виводять однакове повідомлення.
Можливість групування блоків case – це побічний ефект того, як switch/case працює без break. Тут виконання коду case 3 починається з рядка (*) та проходить через case 5, бо немає break.
Тип має значення
Необхідно наголосити, що перевірка відповідності є завжди строгою. Значення повинні бути однакового типу аби вони збігалися.
Наприклад, розглянемо наступний код:
- Для
0та1буде виконано першийalert. - Для
2– другийalert. - Але для
3: результат виконанняpromptє строкове значення"3", яке строго не дорівнює===числу3. Таким чином ми маємо “мертвий код” в блоціcase 3! Буде виконано код блокуdefault.