Rumah >hujung hadapan web >tutorial js >Mengapa Adakah `console.log()` Menunjukkan Nilai Tatasusunan yang Diubah Sebelum Perubahan Digunakan?

Mengapa Adakah `console.log()` Menunjukkan Nilai Tatasusunan yang Diubah Sebelum Perubahan Digunakan?

Linda Hamilton
Linda Hamiltonasal
2024-12-22 13:31:43333semak imbas

Why Does `console.log()` Show Altered Array Values Before the Changes Are Applied?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn