Крім умовної конструкції if, у JavaScript є також конструкція switch, яка дає змогу виконувати код за умовою.
Її використовують, коли одну змінну потрібно порівняти з кількома варіантами.
Порівняння відбувається через перевірку строгої рівності (===), див. порівняння.
Для деякої змінної x конструкція switch у JavaScript має такий синтаксис.
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
}
Варіант default необовʼязковий. Його використовують, коли потрібно виконати якийсь код, якщо жоден з інших варіантів не збігається зі змінною.
Наведені вище інструкції break потрібні, бо в JavaScript усі варіанти типово виконуються наскрізно.
Це означає, що без інструкції break виконався б увесь код у варіантах, розташованих нижче першого збігу, навіть якби x не збігався з ними.
Така поведінка, коли варіанти типово виконуються наскрізно, є поширеною пасткою під час використання switch у JavaScript.
Усередині функції замість break можна також використати return, щоб уникнути цієї проблеми.
Наскрізну поведінку можна застосувати собі на користь, коли той самий код потрібно виконати для кількох варіантів. Приклад цього можна знайти в документації MDN.
Типово змінні в різних варіантах case мають спільну область видимості.
Це може призвести до несподіваної поведінки.
Наприклад, через копіювання й вставлення варіанта можна отримати оголошення let message у двох варіантах, що призводить до помилки, див. документацію MDN.
Щоб уникнути проблем через спільну область видимості, можна створити окрему область видимості для кожного варіанта, додавши блоки коду з фігурними дужками.
switch (x) {
case option1: {
// Variables declared here are contained to this case.
break;
}
case option2: {
// ...
break;
}
default: {
// ...
}
}
Замість змінної x можна також використати вираз.
Цей вираз обчислюється один раз на початку конструкції switch, і його результат порівнюється з варіантами.
Поширений випадок такого застосування - «перемикання за типом», яке виконує різний код залежно від типу змінної.
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
}
Варіанти теж можуть бути виразами.