Lompati ke konten utama
Modul 5 · Pelajaran 4 dari 420/32 dalam kursus~12 min
Pelajaran modul (4/4)

coba / tangkap / lempar

Kesalahan dalam JavaScript adalah nilai (biasanya objek Error) yang mengganggu aliran normal dan menggembungkan tumpukan panggilan sampai seseorang menangkapnya. Konstruk untuk menangani kasus ini adalah try / catch.

Terjadi kesalahan: throw

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

throw segera menghentikan fungsi saat ini.

Penangkapan: 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.

Segala sesuatu di dalam try dijalankan; jika terjadi kesalahan (melalui throw atau dengan operasi apa pun yang gagal), kontrol melompat ke blok catch. Variabel setelah catch (...) menerima kesalahan.

finally (opsional)

Kode yang selalu berjalan, error atau tidak. Berguna untuk menutup sumber daya:

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

Kapan menggunakannya (dan kapan tidak)

  • Ya: Operasi I/O (JSON.parse pada input tidak tepercaya, fetch, akses disk), konversi yang bisa gagal.
  • Mungkin tidak: untuk aliran normal. Jika Anda mengetahui suatu masukan mungkin tidak valid, lebih baik untuk memeriksanya dengan if daripada melempar dan menangkap.
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: '...' }

Cobalah

Latihan#js.m5.l4.e1
Upaya: 0Memuat…

Tentukan `safeDivide(a, b)`: jika b adalah 0, buatlah Kesalahan dengan pesan 'Divisione per zero', jika tidak, kembalikan a/b.

Memuat editor…
Tunjukkan petunjuk

if (b === 0) melempar Error baru('...'); lalu kembalikan a/b.

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#js.m5.l4.e2
Upaya: 0Memuat…

Tentukan `parseJsonSafe(teks)`: jika teks valid JSON kembalikan { ok: benar, nilai: <objek> }, jika tidak { ok: salah }. Gunakan coba/tangkap di JSON.parse.

Memuat editor…
Tunjukkan petunjuk

Bungkus JSON.parse di try; di tangkapan kembalikan { ok: false }.

Solusi tersedia setelah 3 upaya