Learn
← Previous Next →

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