Memahami Kesamaan Objek: Mengapa Dua Objek Yang Sama Tidak Sama
Dalam pengaturcaraan, adalah intuitif untuk menganggap bahawa dua pembolehubah yang mewakili objek yang sama harus dianggap sama. Walau bagaimanapun, dalam JavaScript, membandingkan dua objek menggunakan operator kesaksamaan (==) atau operator kesaksamaan yang ketat (===) selalunya menghasilkan hasil yang mengejutkan.
Misteri: Objek Tidak Sama Sama
Pertimbangkan kod berikut:
var a = {}; var b = {}; console.log(a == b); //returns false console.log(a === b); //returns false
Daripada mengembalikan benar sebagai dijangka, kedua-dua perbandingan kembali palsu. Tingkah laku ini mengelirukan pembangun yang menjangkakan dua objek yang kelihatan sama adalah sama.
Penjelasan: Semantik Perbandingan Objek
Kunci untuk memahami tingkah laku ini terletak pada cara JavaScript membandingkan objek. Tidak seperti jenis data primitif seperti nombor atau rentetan, objek mempunyai identiti unik atau rujukan mereka sendiri. Apabila membandingkan dua objek, pengendali kesamaan menyemak sama ada mereka merujuk kepada objek tepat yang sama.
Identiti vs. Nilai
Dalam contoh di atas , a dan b ialah dua objek berbeza, walaupun mempunyai struktur dan sifat yang sama. Setiap objek mempunyai rujukan uniknya sendiri dan pengendali kesaksamaan sedang menilai rujukan ini dan bukannya nilai objek.
Implikasi untuk Perbandingan Objek
Tingkah laku ini mempunyai implikasi yang ketara untuk perbandingan objek. Dua objek hanya akan sama jika ia merujuk kepada objek tepat yang sama. Menugaskan satu objek kepada yang lain hanya mencipta rujukan baharu kepada objek yang sama.
Penyelesaian: Membandingkan Sifat Objek
Jika anda perlu membandingkan kesamaan sifat dua objek , satu penyelesaian ialah menggunakan kaedah JSON.stringify() untuk menukar objek kepada rentetan JSON dan kemudian membandingkan rentetan yang terhasil. Sebagai alternatif, anda boleh menggunakan fungsi pembantu atau pustaka untuk membandingkan sifat objek secara rekursif.
Atas ialah kandungan terperinci Mengapa Dua Objek JavaScript Sama Tidak Dianggap Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!