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
Lepaskan: 2024-12-22 13:31:43
asal
377 orang telah melayarinya

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]
Salin selepas log masuk

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]
Salin selepas log masuk

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.
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan