Оператор switch в JavaScript — вибір за значенням


Загальний опис

switch — це умовна конструкція, яка дозволяє виконувати різні фрагменти коду залежно від значення виразу. Вона працює шляхом послідовного порівняння виразу з кожним з вказаних case. Якщо збіг знайдено, виконується відповідний блок коду. Конструкція завершується після ключового слова break, яке запобігає виконанню наступних блоків. Якщо жоден із випадків (case) не збігається, виконується блок default, якщо він заданий.

Наприклад, для перевірки дня тижня:

const day = "Monday";
switch (day) {
    case "Monday":
        console.log("Початок робочого тижня");
        break;
    case "Friday":
        console.log("Час розслабитись");
        break;
    default:
        console.log("Це звичайний день");
}

Особливість конструкції switch полягає в тому, що порівняння значень виконується жорстко (===), тому різні типи даних не призводять до збігу. Наприклад, 1 і "1" не вважаються рівними.

Якщо пропустити break, виконання коду перейде до наступного блоку, навіть якщо значення не збігаються:

const fruit = "apple";
switch (fruit) {
    case "apple":
        console.log("Яблуко");
    case "orange":
        console.log("Апельсин");
        break;
}
// Виведе: "Яблуко", "Апельсин"

Ця поведінка може використовуватися для об’єднання кількох case для однієї дії.

автор: Bond

Порада

Переконайтеся, що ви додаєте break після кожного блоку. Винятки можна робити тільки свідомо, наприклад, коли потрібно, щоб код «провалився» у наступний випадок.

автор: Bond
Порада

Використовуйте default, навіть якщо здається, що всі можливі випадки враховані. Це корисно для обробки неочікуваних або невідомих значень, наприклад:

switch (status) {
    case "active":
        console.log("Активний");
        break;
    default:
        console.log("Невідомий статус");
}
автор: Bond
Порада

Не використовуйте switch, якщо кількість умов дуже велика. У таких випадках краще застосовувати об'єкти або функціональний підхід. Наприклад:

const actions = {
    Monday: () => console.log("Понеділок"),
    Friday: () => console.log("П’ятниця"),
};
(actions[day] || (() => console.log("Невідомий день")))();
автор: Bond

Синтаксис

switch (вираз) {
    case значення1:
        // Код для значення1
        break;
    case значення2:
        // Код для значення2
        break;
    default:
        // Код за замовчуванням
}

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 4 12 4
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі реалізовано простий конвертер валют, який використовує switch для визначення курсу залежно від обраної валюти. Користувач вводить суму в гривнях і вибирає, у яку валюту конвертувати (долар, євро, фунт). Натисканням кнопки отримує результат розрахунку, який відображається на сторінці.

HTML

<header>
  <h2 class="title">Конструкція switch</h2>
  <p class="description">Обирає та виконує код залежно від значення змінної.</p>
</header>
<main>
  <div class="result">
    <!-- Вхідні дані -->
    <label for="amount">Сума в гривнях:</label>
    <input type="number" id="amount" placeholder="Введіть суму" />
    
    <label for="currency">Конвертувати у валюту:</label>
    <select id="currency">
      <option value="usd">Долар</option>
      <option value="eur">Євро</option>
      <option value="gbp">Фунт</option>
    </select>
    
    <button id="convert-btn">Конвертувати</button>
    
    <!-- Виведення результату -->
    <p id="output">Результат: <span id="converted-amount">-</span></p>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

label {
  display: block;
  margin-top: 10px;
}

input, select {
  margin: 10px 0;
  padding: 5px;
  font-size: 14px;
}

button {
  background-color: #007BFF;
  color: #fff;
  border: none;
  padding: 10px 15px;
  cursor: pointer;
}

button:hover {
  background-color: #0056b3;
}

p#output {
  margin-top: 20px;
  font-weight: bold;
}

JS

document.getElementById("convert-btn").addEventListener("click", () => {
  const amount = parseFloat(document.getElementById("amount").value);
  const currency = document.getElementById("currency").value;
  const output = document.getElementById("converted-amount");

  if (isNaN(amount) || amount <= 0) {
    output.textContent = "Введіть коректну суму.";
    return;
  }

  let convertedAmount;

  // Конструкція switch для вибору валюти
  switch (currency) {
    case "usd":
      convertedAmount = amount / 36.5; // Курс гривня-долар
      break;
    case "eur":
      convertedAmount = amount / 40.0; // Курс гривня-євро
      break;
    case "gbp":
      convertedAmount = amount / 46.0; // Курс гривня-фунт
      break;
    default:
      convertedAmount = null;}


  // Вивід результату
  if (convertedAmount) {
    output.textContent = `${convertedAmount.toFixed(2)} ${currency.toUpperCase()}`;
  } else {
    output.textContent = "Невідома валюта.";
  }
});
//# sourceURL=pen.js
автор: Bond

У цьому прикладі switch використовується для реалізації калькулятора. Конструкція забезпечує простоту читання та додавання нових операцій.

function calculator(a, b, operation) {
    switch (operation) {
        case "add":
            return a + b;
        case "subtract":
            return a - b;
        case "multiply":
            return a * b;
        case "divide":
            return b !== 0 ? a / b : "Помилка: ділення на нуль";
        default:
            return "Невідома операція";
    }
}
console.log(calculator(4, 2, "add")); // 6
console.log(calculator(4, 0, "divide")); // Помилка: ділення на нуль
автор: Bond

Цей приклад демонструє, як switch може обробляти різні HTTP-статуси. Завдяки блоку default можна легко передбачити поведінку для невідомих значень.

function handleResponse(status) {
    switch (status) {
        case 200:
            return "OK";
        case 404:
            return "Not Found";
        case 500:
            return "Server Error";
        default:
            return "Unknown Status";
    }
}
console.log(handleResponse(200)); // OK
console.log(handleResponse(403)); // Unknown Status
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід