console.log() memaparkan nilai pembolehubah sebelum ia benar-benar berubah
P粉356361722
P粉356361722 2023-08-22 17:35:57
0
2
401
<p>Saya faham kod ini. Mari buat salinan A dan panggilnya C. Apabila A berubah, C tetap sama. </p> <pre class="brush:php;toolbar:false;">var A = 1; var C = A; console.log(C); // 1 A++; console.log(C); // 1</pre> <p>Tetapi apabila A ialah tatasusunan, keadaannya berbeza. Bukan sahaja C berubah, tetapi ia berubah sebelum kita menyentuh A. </p> <pre class="brush:php;toolbar:false;">var A = [2, 1]; var C = A; console.log(C); // [2, 1] A.sort(); console.log(C); // [1, 2]</pre> <p>Bolehkah sesiapa menerangkan apa yang berlaku dalam contoh kedua? </p>
P粉356361722
P粉356361722

membalas semua(2)
P粉578680675

console.log()Menerima rujukan kepada objek, jadi apabila objek berubah, nilai dalam konsol juga akan berubah. Untuk mengelakkan perkara ini, anda boleh menggunakan kaedah berikut:

console.log(JSON.parse(JSON.stringify(c)))

AMARAN MDN:

P粉949848849

Jawapan Pointy memberikan maklumat yang baik, tetapi bukan jawapan yang betul untuk soalan itu.

Tingkah laku yang diterangkan oleh OP adalah sebahagian daripada pepijat yang pertama kali dilaporkan pada Mac 2010, telah diperbaiki untuk Webkit pada Ogos 2012, tetapi sehingga berita ini ditulis masih belum disepadukan ke dalam Google Chrome. Tingkah laku bergantung pada sama ada tetingkap nyahpepijat konsol console.log() terbuka atau tertutup apabila menghantar objek literal kepada .

Petikan daripada laporan pepijat asal (https://bugs.webkit.org/show_bug.cgi?id=35801):

Maklum balas daripada pembangun Chromium:

Banyak aduan berlaku, yang akhirnya membawa kepada pembetulan pepijat.

Perihalan changelog bagi tampung yang dilaksanakan pada Ogos 2012 (http://trac.webkit.org/changeset/125174):

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan