Pelajaran modul (4/4)
coba / tangkap / lempar
An error in JavaScript is a value (usually an Error object) that interrupts the normal flow
and bubbles up the call stack until someone catches it. The construct to handle this case is
try / catch.
Throwing an error: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw immediately interrupts the current function.
Catching: 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.Everything inside try is executed; if an error is thrown (via throw or by any operation that
fails), control jumps to the catch block. The variable after catch (...) receives the error.
finally (optional)
Code that always runs, error or not. Useful to close resources:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}When to use it (and when not)
- Yes: I/O operations (
JSON.parseon untrusted input,fetch, disk access), conversions that can fail. - Maybe not: for the normal flow. If you know an input may be invalid, it is better to check it
with an
ifthan to throw and catch.
// 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: '...' }Try it
Define `safeDivide(a, b)`: if b is 0 throw an Error with message 'Divisione per zero', otherwise return a/b.
Tunjukkan petunjuk
if (b === 0) throw new Error('...'); then return a / b.
Solusi tersedia setelah 3 upaya
Review exercise
Define `parseJsonSafe(text)`: if text is valid JSON return { ok: true, value: <object> }, otherwise { ok: false }. Use try/catch on JSON.parse.
Tunjukkan petunjuk
Wrap JSON.parse in try; in the catch return { ok: false }.
Solusi tersedia setelah 3 upaya