Perbedaan == dan === di JavaScript

Salah satu hal yang paling sering membingungkan developer JavaScript pemula — bahkan yang sudah berpengalaman sekalipun — adalah perbedaan antara == dan ===. Keduanya digunakan unt...

Perbedaan == dan === di JavaScript

Salah satu hal yang paling sering membingungkan developer JavaScript pemula — bahkan yang sudah berpengalaman sekalipun — adalah perbedaan antara == dan ===. Keduanya digunakan untuk membandingkan dua nilai, tapi dengan cara yang sangat berbeda. Memahami perbedaan ini penting karena salah penggunaan bisa menghasilkan bug yang sulit dilacak.

== (Loose Equality / Persamaan Longgar)

Operator == membandingkan dua nilai setelah melakukan konversi tipe (type coercion). Jika kedua sisi memiliki tipe data berbeda, JavaScript akan mencoba mengubah salah satunya agar bisa dibandingkan:

// Perbandingan angka dan string
console.log(5 == '5');      // true — string '5' dikonversi ke angka 5
console.log(0 == '');       // true — string kosong dikonversi ke 0
console.log(0 == false);    // true — false dikonversi ke 0
console.log(1 == true);     // true — true dikonversi ke 1

// Perbandingan dengan null dan undefined
console.log(null == undefined);  // true — ini adalah kasus khusus
console.log(null == 0);          // false — null hanya == undefined
console.log(null == false);      // false — null tidak dikonversi ke false

// Perbandingan dengan string dan boolean
console.log('' == false);   // true — keduanya dikonversi ke 0
console.log('1' == true);   // true — '1' -> 1, true -> 1
console.log('2' == true);   // false — '2' -> 2, true -> 1, tidak sama

=== (Strict Equality / Persamaan Ketat)

Operator === membandingkan nilai tanpa konversi tipe sama sekali. Jika tipe datanya berbeda, hasilnya langsung false:

// Dengan ===, tipe data HARUS sama
console.log(5 === '5');      // false — number vs string
console.log(0 === false);    // false — number vs boolean
console.log(1 === true);     // false — number vs boolean
console.log('' === false);   // false — string vs boolean
console.log(null === undefined); // false — tipe berbeda

// === hanya true jika nilai DAN tipe sama persis
console.log(5 === 5);        // true
console.log('halo' === 'halo'); // true
console.log(true === true);  // true
console.log(null === null);  // true
console.log(undefined === undefined); // true

Mengapa === Lebih Direkomendasikan?

Perilaku type coercion pada == seringkali tidak intuitif dan menjadi sumber bug yang membingungkan. Perhatikan contoh-contoh ini:

// Kasus-kasus membingungkan dengan ==
console.log([] == false);    // true — aneh!
console.log([] == ![]);      // true — sangat aneh!
console.log('' == 0);        // true
console.log(' ' == 0);       // true — spasi juga sama dengan 0!
console.log('0' == false);   // true
console.log(null == 0);      // false — padahal null dianggap "falsy"

// Dengan === semuanya jelas dan predictable
console.log([] === false);   // false — jelas tidak sama
console.log('' === 0);       // false — jelas tidak sama
console.log('0' === false);  // false — jelas tidak sama

Perbandingan null dan undefined

Satu pengecualian populer di mana == justru berguna: memeriksa apakah nilai adalah null atau undefined sekaligus:

function proses(nilai) {
  // Cara dengan == — menangkap null DAN undefined sekaligus
  if (nilai == null) {
    console.log('Nilai null atau undefined, hentikan proses.');
    return;
  }
  console.log('Memproses:', nilai);
}

proses(null);      // 'Nilai null atau undefined...'
proses(undefined); // 'Nilai null atau undefined...'
proses(0);         // 'Memproses: 0' — 0 tidak termasuk!
proses('');        // 'Memproses: ' — string kosong tidak termasuk!

// Dengan ===, harus tulis kondisi dua kali
if (nilai === null || nilai === undefined) {
  // sama efeknya
}

Perbandingan Objek dan Array

Baik == maupun === membandingkan objek dan array berdasarkan referensi, bukan isi:

const a = [1, 2, 3];
const b = [1, 2, 3];
const c = a;

console.log(a == b);  // false — referensi berbeda (objek berbeda di memori)
console.log(a === b); // false — referensi berbeda
console.log(a === c); // true — referensi SAMA (c menunjuk ke objek yang sama dengan a)
console.log(a == c);  // true — referensi sama

// Untuk membandingkan ISI array/objek, gunakan JSON.stringify (cara sederhana)
console.log(JSON.stringify(a) === JSON.stringify(b)); // true

!= vs !==

Perbedaan yang sama berlaku untuk operator tidak sama:

// != menggunakan type coercion
console.log(5 != '5');   // false — karena 5 == '5' adalah true

// !== ketat, tanpa konversi tipe
console.log(5 !== '5');  // true — karena tipenya berbeda (number vs string)

Aturan Sederhana untuk Diikuti

  • Gunakan === dan !== sebagai default di semua kode JavaScript kamu.
  • Gunakan == hanya untuk memeriksa null atau undefined sekaligus (nilai == null), jika kamu memang ingin itu.
  • Linter seperti ESLint memiliki aturan eqeqeq yang akan memperingatkanmu setiap kali menggunakan ==.

Kesimpulan

Perbedaan antara == dan === adalah soal apakah JavaScript melakukan konversi tipe sebelum membandingkan atau tidak. Operator == melakukan konversi tipe (type coercion) yang seringkali menghasilkan hasil yang tidak terduga, sementara === membandingkan nilai dan tipe secara ketat tanpa konversi. Gunakan === sebagai kebiasaan default agar kode kamu lebih predictable, mudah dibaca, dan bebas dari bug yang membingungkan.

perbedaan == dan === javascript double equal triple equal js type coercion javascript strict equality javascript perbandingan nilai javascript
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah — tak perlu login.

Membalas komentar… batal

Belum ada komentar. Jadilah yang pertama!