Rumah >hujung hadapan web >tutorial js >Mengapa Adakah `console.log()` Menunjukkan Nilai Tatasusunan yang Diubah Sebelum Perubahan Digunakan?
Console.log() Memaparkan Nilai Tatasusunan Terubah Secara Pramatang
Dalam pengaturcaraan, kami kerap memanipulasi pembolehubah dan log nilainya ke konsol untuk menjejaki perubahan. Walau bagaimanapun, dalam kes tatasusunan, kami menghadapi gelagat yang tidak dijangka di mana console.log() mengeluarkan nilai tatasusunan yang diubah suai walaupun sebelum perubahan dibuat.
Fenomena ini boleh diperhatikan dalam coretan kod berikut:
var A = [2, 1]; var C = A; console.log(C); // [1, 2] A.sort(); console.log(C); // [1, 2]
Dalam contoh ini, kita mempunyai tatasusunan A dengan dua elemen yang diperuntukkan kepada pembolehubah C yang lain. Apabila kita log C, ia pada mulanya memaparkan yang asal nilai [1, 2]. Walau bagaimanapun, apabila kita memanggil kaedah sort() pada A, kita melihat bahawa C juga menunjukkan nilai yang diisih [1, 2], walaupun perubahan telah digunakan pada A.
Memahami Tingkah Laku
Tingkah laku ini berlaku kerana console.log() menghantar rujukan kepada objek dan bukannya salinan nilainya. Apabila anda log tatasusunan, konsol memaparkan rujukan kepada tatasusunan dalam ingatan, yang dikemas kini apabila tatasusunan berubah.
Untuk menggambarkan ini, pertimbangkan kod yang diubah suai berikut:
var A = [2, 1]; var C = JSON.parse(JSON.stringify(A)); console.log(C); // [1, 2] A.sort(); console.log(C); // [2, 1]
Dengan menukar tatasusunan A kepada rentetan JSON dan kemudian kembali kepada tatasusunan, kami mencipta objek baharu dalam ingatan. Ini bermakna C kini memegang salinan nilai asal A. Apabila kita mengisih A, C kekal tidak berubah kerana ia adalah objek yang berasingan.
Amaran MDN
Tingkah laku ini sangat relevan dalam versi moden penyemak imbas seperti Chrome dan Firefox:
MDN warns: ... at the moment you open the console.
Ini bermakna nilai log yang dipaparkan dalam konsol mungkin tidak mewakili nilai sebenar objek pada masa ianya dilog. Sebaliknya, ia mungkin menunjukkan nilai dari semasa konsol mula dibuka, yang boleh menyebabkan kekeliruan.
Kesimpulan
Apabila bekerja dengan tatasusunan, adalah penting untuk menjadi menyedari tingkah laku lulus rujukan console.log(). Jika anda ingin log nilai sebenar tatasusunan tanpa risiko perubahan pramatang, pertimbangkan untuk menggunakan kaedah JSON.parse() dan JSON.stringify() untuk mencipta salinan dalam tatasusunan dahulu.
Atas ialah kandungan terperinci Mengapa Adakah `console.log()` Menunjukkan Nilai Tatasusunan yang Diubah Sebelum Perubahan Digunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!