Bandingkan Isi Objek dengan Cara Mengatasi Object Comparison Selalu False Javascript

Cara mengatasi object comparison selalu false di JavaScript adalah membandingkan isi properti, bukan objeknya langsung. Operator == dan === hanya mengecek apakah kedua variabel menunjuk ke referensi memori yang sama, sehingga {a: 1} === {a: 1} tetap false walau isinya identik.

Penyebab Object Comparison Selalu False di JavaScript

Ini bukan bug sintaks, melainkan logic error. Kode berjalan tanpa TypeError atau SyntaxError, tetapi logika pengecekannya keliru.

  • == dan === untuk object membandingkan referensi, bukan isi.
  • Setiap object literal membuat referensi baru di memori.
  • Salinan dengan spread seperti {...obj} juga punya referensi berbeda.

Tabel Troubleshooting Object Comparison False

Kondisi | Penyebab | Solusi

Tabel berikut merangkum pola yang paling sering muncul:

Kondisi Penyebab Solusi
{} === {} false Dua referensi baru Bandingkan isi key
Variabel sama true Referensi sama Pertahankan referensi
Salinan shallow atau deep false Object baru walau isi sama Pakai deep equal

Cara Memperbaiki Perbandingan Object yang Selalu False

  1. Pastikan kedua nilai memang object dan bukan null.
  2. Bandingkan key penting secara manual bila struktur kecil.
  3. Gunakan JSON.stringify hanya untuk object datar sederhana.
  4. Buat fungsi deepEqual kecil untuk object bersarang.
// SALAH: selalu false
const a = { id: 1 };
const b = { id: 1 };
console.log(a === b);

// BENAR: bandingkan isi
console.log(a.id === b.id);

// BENAR: deep equal sederhana
function isEqual(x, y) {
  return Object.keys(x).length === Object.keys(y).length &&
    Object.keys(x).every(k => x[k] === y[k]);
}
console.log(isEqual(a, b)); // true

Kode pertama gagal karena a dan b menempati memori berbeda. Pengecekan a.id berhasil karena number dibandingkan berdasarkan nilai. Fungsi isEqual memeriksa jumlah key lalu tiap nilainya. Perhatikan shallow copy hanya menyalin level pertama, sedangkan deep copy menyalin seluruh level. JSON.stringify sensitif terhadap urutan key dan gagal pada object circular.

Cara Mencegah Perbandingan Object Keliru

  • Bandingkan id atau properti kunci, bukan seluruh object.
  • Normalisasi bentuk data dari API sebelum dibandingkan.
  • Hindari JSON.stringify untuk object circular atau berisi function.
  • Gunakan referensi stabil untuk state, misalnya simpan object acuan dalam variabel.

FAQ

Kenapa {} === {} selalu false di JavaScript?

Karena setiap kurung kurawal membuat object baru dengan referensi memori berbeda.

Apakah JSON.stringify aman untuk bandingkan object?

Aman hanya untuk object datar tanpa circular dan urutan key konsisten.

Kapan perlu fungsi deep equal untuk object?

Perlu saat object bersarang dan perbandingan harus memeriksa semua level properti.