- Bab 7 dari 12
- 25 menit
- 1 latihan kode
- 4 soal kuis
Error Handling dan JSON
Di bab ini (10 bagian)
Tujuan bab ini
- Mengenali empat jenis error bawaan yang paling sering muncul:
SyntaxError,ReferenceError,TypeError, danRangeError. - Menangkap error dengan
try,catch, danfinallysupaya program tidak berhenti total. - Melempar error sendiri dengan
throw new Error()dan membuat kelas error kustom sederhana. - Mengubah objek menjadi teks JSON dan sebaliknya, termasuk menangani JSON yang tidak valid.
Error itu bukan musuh
Setiap program pasti pernah ketemu error. Bedanya, program yang baik tahu apa yang harus dilakukan saat error terjadi. Bayangkan aplikasi ojek online yang langsung blank cuma karena satu data alamat rusak dari server. Nyebelin, kan? Lebih baik aplikasi menampilkan pesan "Alamat tidak terbaca, coba lagi" dan tetap bisa dipakai.
Di JavaScript, error adalah objek. Setiap objek error punya minimal dua properti penting:
name: jenis errornya, misalnya"TypeError".message: penjelasan singkat apa yang salah.
Kalau error tidak ditangkap, JavaScript berhenti menjalankan kode di bawahnya dan mencetak pesan merah di console. Di browser, sisa script di file itu tidak jalan. Di Node.js, prosesnya langsung keluar.
Empat jenis error yang sering kamu temui
| Jenis | Kapan muncul | Contoh pemicu |
|---|---|---|
SyntaxError | Kode tidak sesuai aturan tata bahasa JavaScript | Kurung kurawal tidak ditutup, JSON.parse("{nama}") |
ReferenceError | Memakai variabel yang tidak ada | console.log(totl) padahal namanya total |
TypeError | Operasi tidak cocok dengan tipe nilainya | Memanggil undefined() atau membaca properti dari null |
RangeError | Nilai di luar rentang yang diizinkan | new Array(-1), (3.14).toFixed(200) |
Contoh nyata masing-masing:
Satu catatan soal SyntaxError: kalau kesalahan tata bahasanya ada di kode kamu sendiri (misalnya lupa kurung tutup), seluruh file gagal dibaca sebelum satu baris pun dijalankan. Jadi try/catch di file yang sama tidak bisa menolongnya. SyntaxError yang bisa ditangkap biasanya datang dari kode yang dibaca saat program berjalan, contohnya JSON.parse dengan teks rusak.
Pesan error persisnya bisa sedikit berbeda antara Chrome, Firefox, dan Node.js. Yang pasti sama adalah name-nya.
try, catch, finally
Strukturnya seperti ini:
Cara kerjanya langkah demi langkah:
- JavaScript menjalankan isi
trydari atas ke bawah. - Begitu ada error, sisa baris di
trydilewati, lalu loncat kecatch. Objek errornya masuk ke parametererror. - Kalau tidak ada error sama sekali,
catchdilewati. finallyjalan di akhir dalam dua kondisi itu. Cocok untuk "beres-beres": menutup loading spinner, menutup koneksi, atau mencatat log.
Pada panggilan kedua, "10".toFixed tidak ada karena string tidak punya method itu, jadi terjadi TypeError. Baris console.log("Hasil:") tidak pernah jalan.
Sejak ES2019, kalau kamu tidak butuh objek errornya, parameter catch boleh dihilangkan: catch { ... }.
Melempar error sendiri dengan throw
Kadang kodenya tidak error secara teknis, tapi datanya salah secara logika. Misalnya umur bernilai -5. JavaScript tidak akan protes, jadi kamu yang harus protes dengan throw.
throw langsung menghentikan fungsi, mirip return, tapi alirannya meloncat ke catch terdekat. Selalu lempar objek Error (bukan string biasa seperti throw "salah") supaya kamu dapat message, name, dan stack untuk melacak baris asal error.
Kamu juga bisa melempar jenis yang lebih spesifik, misalnya throw new TypeError("Harus angka") atau throw new RangeError("Maksimal 100").
Error kustom singkat
Untuk aplikasi yang lebih besar, membuat jenis error sendiri membantu membedakan "salah input user" dari "bug di kode". Caranya dengan class yang mewarisi Error. Detail class dibahas di bab berikutnya, cukup pahami polanya:
Perhatikan throw e di bagian else. Itu disebut rethrow: kita hanya menangani error yang kita kenal, sisanya dibiarkan naik ke atas.
JSON: bahasa pertukaran data
JSON (JavaScript Object Notation) adalah format teks untuk mengirim data, misalnya dari server ke aplikasi. Bentuknya mirip objek JavaScript, tapi aturannya lebih ketat:
- Nama properti wajib pakai kutip dua:
"nama", bukannamaatau'nama'. - String juga wajib kutip dua.
- Tidak boleh ada koma di akhir (
[1, 2,]tidak valid). - Tidak ada
undefined, fungsi, atau komentar.
Dua fungsi utamanya:
Satu jebakan: JSON.stringify diam-diam membuang properti bernilai undefined dan fungsi.
Menangani JSON yang tidak valid
Data dari luar (server, localStorage, input user) tidak bisa dipercaya 100%. JSON.parse melempar SyntaxError kalau teksnya rusak, jadi bungkus selalu dengan try/catch:
Dengan pola ini aplikasi tetap jalan memakai nilai cadangan, bukan crash.
Kesalahan umum
- Membungkus semua kode dengan satu
tryraksasa. Kamu jadi tidak tahu baris mana yang bermasalah. Bungkus bagian yang memang berisiko saja. catchkosong tanpa tindakan. Error ditelan diam-diam dan bug jadi susah dicari. Minimal catat denganconsole.error.throw "teks"alih-alihthrow new Error("teks"). Kamu kehilangannamedanstack.- Lupa bahwa
JSON.parsemenghasilkan objek baru. Mengubah hasilnya tidak mengubah teks aslinya. - Menulis JSON dengan kutip satu.
JSON.parse("{'a':1}")langsungSyntaxError.
Rangkuman
- Error adalah objek dengan
namedanmessage; jenis yang sering muncul adalahSyntaxError,ReferenceError,TypeError, danRangeError. trymenjalankan kode berisiko,catchmenangani error,finallyselalu jalan di akhir.throw new Error("pesan")menghentikan fungsi dan meloncat kecatchterdekat;class X extends Errormembuat error kustom.JSON.stringifymengubah nilai menjadi teks,JSON.parsemengubah teks menjadi nilai.- Selalu bungkus
JSON.parseuntuk data dari luar dengantry/catchdan sediakan nilai cadangan.
Slide 14 sampai 14 dari deck JavaScript. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Pembaca JSON yang tidak gampang crash
Lengkapi dua fungsi berikut:
bacaJSON(teks, cadangan)mengembalikan hasilJSON.parse(teks). Kalau teksnya bukan JSON valid, jangan sampai error keluar: kembalikancadangan. Contoh:bacaJSON('{"tema":"gelap"}', null).temamenghasilkan"gelap", sedangkanbacaJSON('{tema: gelap}', 'x')menghasilkan"x".cekUmur(umur)mengembalikanumurbila berupa angka dari 0 sampai 150. Selain itu, lemparnew RangeError("Umur tidak valid").
Cek pemahaman
1Error jenis apa yang muncul saat kode membaca properti dari nilai null, misalnya `user.nama` ketika `user` bernilai null?
2Blok finally tetap dijalankan walaupun tidak ada error di blok try.
3Apa yang ditampilkan kode berikut di console?
try { JSON.parse("{'a': 1}"); console.log("A"); } catch (e) { console.log(e.name); } finally { console.log("C"); }4Apa hasil `JSON.stringify({ a: 1, b: undefined })`?