Gelagat Objek dan console.log yang Membingungkan
Apabila menggunakan fungsi console.log() untuk memeriksa objek, anda mungkin menghadapi pelik keputusan. Sebagai contoh, jika anda log tatasusunan objek dan kemudian mengubah suainya menggunakan splice(), anda akan melihat bahawa konsol masih memaparkan tatasusunan asal.
Mengapa Ini Berlaku
Console.log memeriksa objek secara tidak segerak. Walaupun konsol mendapatkan semula rujukan kepada objek secara serentak, ia menangguhkan memaparkan sifatnya sehingga selepas anda mengembangkannya (tingkah laku ini berbeza-beza merentas pelayar). Akibatnya, jika objek diubah sebelum pemeriksaan, data yang dipaparkan akan mengandungi nilai yang dikemas kini.
Mengenalpasti Percanggahan
Chrome menyediakan isyarat visual untuk memaklumkan anda tentang perkara ini tingkah laku. "i" kecil muncul dalam kotak apabila anda menuding di atas objek, memaparkan mesej ini: "Nilai objek di sebelah kiri diambil gambar semasa dilog, nilai di bawah telah dinilai sebentar tadi."
Mengatasi Isu
Untuk mengelakkan percanggahan ini, pertimbangkan untuk mengelog harta objek individu values:
console.log(obj.foo, obj.bar, obj.baz);
Sebagai alternatif, anda boleh menukar objek kepada rentetan JSON menggunakan JSON.stringify():
console.log(JSON.stringify(obj));
Pendekatan lain adalah untuk mengekalkan kebolehperiksaan objek dengan semula pengekodan mereka dengan JSON.parse():
console.log(JSON.parse(JSON.stringify(obj)));
Walau bagaimanapun, ambil perhatian bahawa JSON mengalih keluar yang tidak boleh bersiri sifat seperti fungsi dan elemen DOM. Untuk objek yang kompleks, gunakan mekanisme salin dalam yang teguh untuk mengekalkan sifat sedemikian.
Atas ialah kandungan terperinci Mengapa Adakah `console.log()` Menunjukkan Nilai Objek Tidak Dijangka Selepas Pengubahsuaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!