Модульні уроки (4/4)
спробувати / зловити / кинути
Помилка в JavaScript – це значення (зазвичай об’єкт Error), яке перериває нормальний потік
і піднімає стек викликів, поки хтось його не зловить. Конструкція для обробки цього випадку є
try / catch.
Видає помилку: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw негайно перериває поточну функцію.
Ловля: try / catch
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 (необов'язково)
Код, який завжди виконується, незважаючи на помилку чи ні. Корисно для закриття ресурсів:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}Коли його використовувати (а коли ні)
- Так: операції введення-виведення (
JSON.parseна ненадійний вхід,fetch, доступ до диска), перетворення, які може вийти з ладу. - Можливо, ні: для нормального потоку. Якщо ви знаєте, що введення може бути недійсним, краще його перевірити
з
ifніж кидати та ловити.
// 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: '...' }Спробуйте
Визначте `safeDivide(a, b)`: якщо b дорівнює 0, видасть помилку з повідомленням 'Divisione per zero', інакше поверне a/b.
Показати підказку
if (b === 0) викинути нову помилку ('...'); потім поверніть a / b.
Рішення доступне після 3 спроб
Повторна вправа
Визначте `parseJsonSafe(text)`: якщо текст дійсний, JSON повертає { ok: true, значення: <object> }, інакше { ok: false }. Використовуйте try/catch у JSON.parse.
Показати підказку
Оберніть JSON.parse в try; у catch return { ok: false }.
Рішення доступне після 3 спроб