Setiap developer pasti pernah menghadapi kode yang tidak berjalan sesuai harapan. Kemampuan debugging — menemukan dan memperbaiki bug — adalah salah satu skill terpenting yang harus dikuasai. JavaScript menyediakan objek console dengan berbagai method yang jauh lebih kaya dari sekadar console.log(). Artikel ini akan membahas teknik-teknik debugging yang akan menghemat banyak waktu kamu.
console.log() — Dasar yang Wajib Dikuasai
console.log() adalah method paling umum, tapi ada beberapa trik yang mungkin belum kamu ketahui:
// Log sederhana
console.log('Halo dunia!');
console.log(42, true, 'string', null); // Bisa multiple argumen
// Menggunakan label dengan objek
const pengguna = { nama: 'Andi', umur: 25, kota: 'Bandung' };
console.log('Data pengguna:', pengguna); // Tampil sebagai objek interaktif di DevTools
// Computed property name — trik untuk label otomatis
const harga = 50000;
const diskon = 0.1;
console.log({ harga, diskon }); // { harga: 50000, diskon: 0.1 }
// Template literal untuk pesan yang informatif
console.log(`Harga setelah diskon: Rp ${(harga * (1 - diskon)).toLocaleString('id-ID')}`);
// CSS styling di console (hanya browser)
console.log('%cPerhatian!', 'color: red; font-size: 20px; font-weight: bold;');
console.log('%cBerhasil!', 'color: green; background: #e8f5e9; padding: 4px 8px;');
console.error(), console.warn(), console.info()
Gunakan method yang sesuai konteks untuk memudahkan filtering di DevTools:
// Tampil dengan ikon X merah — untuk error
console.error('Gagal mengambil data dari API!');
console.error('Detail error:', new Error('Network timeout'));
// Tampil dengan ikon segitiga kuning — untuk peringatan
console.warn('Fungsi ini sudah deprecated, gunakan versi baru.');
console.warn('Token akan kadaluarsa dalam 5 menit.');
// Tampil dengan ikon biru — untuk informasi
console.info('Aplikasi berhasil dimulai.');
console.info('Versi:', '2.1.0', '| Environment:', 'development');
// Di DevTools, kamu bisa filter berdasarkan level ini menggunakan dropdown "Levels"
console.table() — Menampilkan Data Array/Objek
Ini method favorit untuk debugging data berupa array objek:
const produk = [
{ id: 1, nama: 'Laptop', harga: 8000000, stok: 5 },
{ id: 2, nama: 'Mouse', harga: 150000, stok: 12 },
{ id: 3, nama: 'Keyboard', harga: 500000, stok: 8 }
];
// Tampil dalam format tabel yang rapi di DevTools!
console.table(produk);
// Bisa filter kolom yang ingin ditampilkan
console.table(produk, ['nama', 'harga']); // Hanya tampil kolom nama dan harga
console.group() — Mengelompokkan Log
Sangat berguna saat kode kompleks menghasilkan banyak log:
function prosesOrder(order) {
console.group(`Memproses Order #${order.id}`); // Mulai grup
console.log('Validasi item...');
order.items.forEach(item => {
console.group(` Item: ${item.nama}`);
console.log('Harga:', item.harga);
console.log('Qty:', item.qty);
console.log('Subtotal:', item.harga * item.qty);
console.groupEnd(); // Tutup sub-grup
});
const total = order.items.reduce((sum, item) => sum + item.harga * item.qty, 0);
console.log('Total:', total);
console.groupEnd(); // Tutup grup utama
}
prosesOrder({
id: 'ORD-001',
items: [
{ nama: 'Kopi', harga: 25000, qty: 2 },
{ nama: 'Roti', harga: 15000, qty: 3 }
]
});
console.time() — Mengukur Performa
Gunakan ini untuk mengukur berapa lama sebuah operasi berlangsung:
// Mulai timer
console.time('filter-data');
// Operasi yang ingin diukur
const data = Array.from({ length: 100000 }, (_, i) => i);
const hasilFilter = data.filter(n => n % 2 === 0 && n > 50000);
// Hentikan timer dan tampilkan hasilnya
console.timeEnd('filter-data'); // Output: "filter-data: 5.23ms"
// Bisa punya beberapa timer sekaligus dengan nama berbeda
console.time('fetch-api');
// ... operasi fetch ...
console.timeEnd('fetch-api');
console.assert() — Validasi Kondisi
console.assert() hanya mencetak pesan jika kondisi yang diberikan adalah false:
function bagi(a, b) {
console.assert(b !== 0, 'Error: Pembagi tidak boleh nol!', { a, b });
return a / b;
}
bagi(10, 2); // Tidak ada output (kondisi b !== 0 adalah true)
bagi(10, 0); // Output: "Assertion failed: Error: Pembagi tidak boleh nol! {a: 10, b: 0}"
// Berguna untuk memverifikasi asumsi dalam kode
const pengguna = { nama: 'Andi', role: 'admin' };
console.assert(pengguna.role === 'admin', 'Pengguna seharusnya adalah admin!');
console.count() dan console.trace()
// console.count() — hitung berapa kali baris ini dieksekusi
function klikTombol() {
console.count('tombol diklik');
// ...logika lainnya
}
// Setiap kali dipanggil: "tombol diklik: 1", "tombol diklik: 2", dst.
// console.trace() — tampilkan call stack (siapa yang memanggil fungsi ini)
function fungsiC() {
console.trace('Dari mana fungsi ini dipanggil?');
}
function fungsiB() { fungsiC(); }
function fungsiA() { fungsiB(); }
fungsiA();
// Output akan menampilkan: fungsiC <- fungsiB <- fungsiA
Tips Debugging Tambahan
- Gunakan kata kunci
debuggerdi kode untuk membuat breakpoint otomatis ketika DevTools terbuka. - Di DevTools browser, gunakan tab Sources untuk menambahkan breakpoint secara visual.
- Hapus atau komentari semua
console.log()sebelum code masuk ke production. - Pertimbangkan menggunakan library logging seperti
debugatauwinstonuntuk project besar.
Kesimpulan
Objek console JavaScript jauh lebih dari sekadar console.log(). Dengan memanfaatkan console.table() untuk data tabular, console.group() untuk mengelompokkan output, console.time() untuk mengukur performa, dan console.assert() untuk validasi asumsi, proses debugging kamu akan jauh lebih efisien dan terarah. Jadikan kemampuan debugging sebagai bagian dari kebiasaan coding sehari-hari untuk menghasilkan kode yang lebih berkualitas.