Умовна конструкція switch..case в JavaScript

Конструкція switch..case є альтернативою використанню конструкції if..else і також дає змогу обробити одразу кілька умов:

const income = 200;

switch(income){
case 100 :
console.log("Дохід дорівнює 100");
break;
case 200 :
console.log("Дохід дорівнює 200");
break;
case 500 :
console.log("Дохід дорівнює 500");
break;
}

Після ключового слова switch у дужках йде порівнюваний вираз. Значення цього виразу послідовно порівнюється зі значеннями, поміщеними після оператора сase. І якщо збіг буде знайдено, то буде виконуватися певний блок сase.

Наприкінці кожного блоку сase ставиться оператор break, щоб уникнути виконання інших блоків. У цьому випадку константа income дорівнює 200, тому буде виконуватися блок

case 200 :
console.log("Дохід дорівнює 200");
break;

Оператор break

Оператор break служить для того, щоб уникнути виконання інших умов. Наприклад, ми могли б написати:

let income = 200;

switch(income){
case 100 :
console.log("Дохід дорівнює 100");
income +=100;
break;
case 200 :
console.log("Дохід дорівнює 200");
income +=100;
break;
case 500 :
console.log("Дохід дорівнює 500");
income +=100;
// break; // тут сенсу в break немає, оскільки останній блок
}

Тут знову income дорівнює 200 і знову буде виконуватися блок

case 200 :
console.log("Дохід дорівнює 200");
income +=100;
break;

Завдяки оператору break після виконання блоку відбудеться вихід із конструкції switch, і жодні інші блоки case не будуть виконуватися.

Але тепер приберемо оператор break:

let income = 200;

switch(income){
case 100 :
console.log("Дохід дорівнює 100");
income +=100;
case 200 :
console.log("Дохід дорівнює 200");
income +=100;
case 500 :
console.log("Дохід дорівнює 500");
income +=100;
}

console.log("Фінальний дохід дорівнює", income);

Результат виконання:

Дохід дорівнює 200 Дохід дорівнює 500 Фінальний дохід дорівнює 400 

Тут спочатку змінна income знову дорівнює 200, відповідно буде виконуватися блок

case 200 :
console.log("Дохід дорівнює 200");
income +=100;

Значення income збільшується на 100, однак наприкінці блоку немає оператора break, тож керування перейде до перевірки умови в наступний блок:

case 500 :
console.log("Дохід дорівнює 500");
income +=100;

І не важливо, що income не дорівнює 500 (а лише 300 на даний момент), цей блок також буде виконуватися.

Об'єднання умов

Однак за необхідності можна відразу обробити кілька умов:

const income = 200;

switch(income){
case 100 :
case 200 :
console.log("Дохід дорівнює 100 або 200");
break;
case 500 :
console.log("Дохід дорівнює 500");
break;
}

У цьому випадку для умови, коли income дорівнює 100 і 200, виконуються одні й ті самі дії.

Умова за замовчуванням - default

Якщо ми хочемо також обробити ситуацію, коли збігу не буде знайдено, то можна додати необов'язковий блок default:

const income = 700;

switch(income){
case 100 :
console.log("Дохід дорівнює 100");
break;
case 200 :
console.log("Дохід дорівнює 200");
break;
case 500 :
console.log("Дохід дорівнює 500");
break;
default:
console.log("Дохід невідомої величини");
break;
}