console.log() memaparkan nilai yang diubah sebelum nilai berubah sebenarnya berubah
P粉427877676
P粉427877676 2023-08-27 22:37:24
0
2
534
<p>Saya faham kod ini. Kami menyalin A dan memanggilnya C. Apabila A berubah, C kekal tidak berubah</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); // [1, 2] A.sort(); console.log(C); // [1, 2]</pre> <p>Bolehkah seseorang menerangkan apa yang berlaku dalam contoh kedua? </p>
P粉427877676
P粉427877676

membalas semua(2)
P粉023326773

console.log() akan menghantar rujukan kepada objek, jadi nilai dalam konsol akan berubah apabila objek berubah. Untuk mengelakkan ini anda boleh:

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

Amaran MDN:

P粉795311321

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

Tingkah laku yang diterangkan oleh OP adalah sebahagian daripada pepijat yang pertama kali dilaporkan pada Mac 2010 dan ditambal untuk Webkit pada Ogos 2012, tetapi masih belum disepadukan ke dalam Google Chrome setakat artikel ini ditulis. 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):

Respons pembangun Chromium:

Banyak aduan berlaku, yang akhirnya membawa kepada pembetulan pepijat.

Perihalan changelog untuk 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