===
JavaScript membezakan antara jenis data primitif dan bukan primitif. Jenis primitif (Boolean, Null, Undefined, String, Number) diluluskan dengan nilai, manakala jenis bukan primitif (tatasusunan, fungsi, dan objek-semua objek teknikal) diluluskan dengan rujukan.
tingkah laku jenis primitif (lulus nilai)
Apabila anda mengisytiharkan pemboleh ubah primitif, nilai disimpan secara langsung:
tingkah laku jenis bukan primitif (lulus dengan rujukan)
pembolehubah tidak primitif menyimpan rujukan ke lokasi memori objek, bukan objek itu sendiri:
<code class="language-javascript">const name = 'John'; const age = 25;</code>
Pada mulanya, fruits
memegang rujukan (mis., Alamat memori H001) menunjuk kepada array kosong. Selepas push()
, array di H001 diubahsuai.
Penyalinan rujukan
Apabila anda menyalin pembolehubah rujukan menggunakan =
, anda menyalin rujukan, bukan data objek:
<code class="language-javascript">const fruits = []; fruits.push('Banana');</code>
kedua -dua fruits
dan yellowFruits
kini menunjuk ke lokasi memori yang sama. Mengubahsuai satu mengubah yang lain.
menambah 'nanas' ke yellowFruits
juga berubah fruits
kerana mereka berkongsi rujukan yang sama.
Menetapkan semula pembolehubah rujukan
menugaskan semula pemboleh ubah rujukan mencipta rujukan baru:
<code class="language-javascript">const fruits = ['Banana']; const yellowFruits = fruits;</code>
Objek asal { name: 'John' }
kekal dalam ingatan, tetapi person
kini menunjuk ke objek baru { name: 'Mary' }
.
kenapa ===
gagal dengan tatasusunan dan objek
operator ===
<code class="language-javascript">let person = { name: 'John' }; person = { name: 'Mary' };</code>
dan arr1
mempunyai kandungan yang sama, mereka mempunyai alamat memori yang berbeza, menghasilkan arr3
. false
Parameter fungsi dan kesucian
Lulus nilai primitif ke fungsi menyalin nilai. Walau bagaimanapun, objek lulus melepasi rujukan. Perbezaan ini penting untuk memahami fungsi tulen dan tidak suci.
<code class="language-javascript">const arr1 = ['1']; const arr2 = arr1; // Same reference console.log(arr1 === arr2); // true const arr3 = ['1']; // Different reference console.log(arr1 === arr3); // false</code>
Secara ringkas
===
Atas ialah kandungan terperinci Mengapa kita tidak dapat membandingkan tatasusunan dan objek dengan ===. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!