Перейти до основного вмісту
Модуль 5 · Урок 4 із 420/32 у курсі~12 min
Модульні уроки (4/4)

спробувати / зловити / кинути

Помилка в JavaScript – це значення (зазвичай об’єкт Error), яке перериває нормальний потік і піднімає стек викликів, поки хтось його не зловить. Конструкція для обробки цього випадку є try / catch.

Видає помилку: throw

JS
function dividi(a, b) {
  if (b === 0) {
    throw new Error('Divisione per zero');
  }
  return a / b;
}

throw негайно перериває поточну функцію.

Ловля: try / catch

JS
try {
  const r = dividi(10, 0);
  console.log('ok', r);
} catch (err) {
  console.log('errore:', err.message); // 'errore: Divisione per zero'
}

// Il programma continua qui, anche se c'è stato un errore.

Усе всередині try виконується; якщо виникає помилка (через throw або будь-якою операцією, яка не вдається), керування переходить до блоку catch. Змінна після catch (...) отримує помилку.

finally (необов'язково)

Код, який завжди виконується, незважаючи на помилку чи ні. Корисно для закриття ресурсів:

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

Коли його використовувати (а коли ні)

  • Так: операції введення-виведення (JSON.parse на ненадійний вхід, fetch, доступ до диска), перетворення, які може вийти з ладу.
  • Можливо, ні: для нормального потоку. Якщо ви знаєте, що введення може бути недійсним, краще його перевірити з if ніж кидати та ловити.
JS
// Tipico: parsing JSON difensivo
function parseJsonSafe(text) {
  try {
    return { ok: true, value: JSON.parse(text) };
  } catch (err) {
    return { ok: false, error: err.message };
  }
}

parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }

Спробуйте

вправи#js.m5.l4.e1
Спроби: 0Завантаження…

Визначте `safeDivide(a, b)`: якщо b дорівнює 0, видасть помилку з повідомленням 'Divisione per zero', інакше поверне a/b.

Завантаження редактора…
Показати підказку

if (b === 0) викинути нову помилку ('...'); потім поверніть a / b.

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m5.l4.e2
Спроби: 0Завантаження…

Визначте `parseJsonSafe(text)`: якщо текст дійсний, JSON повертає { ok: true, значення: <object> }, інакше { ok: false }. Використовуйте try/catch у JSON.parse.

Завантаження редактора…
Показати підказку

Оберніть JSON.parse в try; у catch return { ok: false }.

Рішення доступне після 3 спроб