console.log() memaparkan nilai yang diubah sebelum nilai berubah sebenarnya berubah
P粉427877676
2023-08-27 22:37:24
<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>
console.log()
akan menghantar rujukan kepada objek, jadi nilai dalam konsol akan berubah apabila objek berubah. Untuk mengelakkan ini anda boleh:Amaran MDN:
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):