Hari 12: Error Handling & Debugging
55 min
Last updated 09 Apr 2026
Try/Catch/Finally
function bagi(a, b) {
if (b === 0) throw new Error("Tidak bisa bagi dengan nol!");
return a / b;
}
try {
console.log(bagi(10, 2)); // 5
console.log(bagi(5, 0)); // throw error
} catch (error) {
console.error(`Error: ${error.message}`);
} finally {
console.log("Selesai"); // selalu jalan
}
Custom Error
class ValidationError extends Error {
constructor(field, message) {
super(message);
this.name = "ValidationError";
this.field = field;
}
}
class NetworkError extends Error {
constructor(status, message) {
super(message);
this.name = "NetworkError";
this.status = status;
}
}
function validasi(data) {
if (!data.email) throw new ValidationError("email", "Email wajib diisi");
if (!data.email.includes("@")) throw new ValidationError("email", "Format email tidak valid");
}
try {
validasi({ email: "bukan-email" });
} catch (e) {
if (e instanceof ValidationError) {
console.log(`Validasi gagal pada field "${e.field}": ${e.message}`);
}
}
💡
Notice: Error berbeda bisa di-catch dengan instanceof. finally selalu berjalan untuk cleanup (tutup koneksi, dll).
Assignment
Buat fungsi parseJSON(str) yang mencoba JSON.parse(str). Jika gagal, throw SyntaxError dengan pesan "JSON tidak valid: " + error.message. Test dengan JSON valid dan tidak valid.
Expected output:
Berhasil: Budi, 25 tahun
Caught: JSON tidak valid: Unexpected token 'n', "{nama: Budi}" is not valid JSON
JS
script.js
Solution
Output