console.log
standartlaştırılmamıştır, bu nedenle davranış oldukça tanımsızdır ve geliştirici araçlarının yayından sürümüne kolayca değiştirilebilir. Yakında cevabımın yanı sıra kitabınız büyük olasılıkla güncelliğini yitirecek.
console.log
Kodumuza göre, eşzamansız olup olmaması bir fark yaratmaz, herhangi bir geri arama falan sağlamaz; ve ilettiğiniz değerler her zaman referans alınır ve işlevi çağırdığınız anda hesaplanır.
O zaman ne olacağını gerçekten bilmiyoruz (Tamam, yapabiliriz, çünkü Firebug, Chrome Devtools ve Opera Dragonfly hepsi açık kaynak kodludur). Konsolun kaydedilen değerleri bir yerde saklaması gerekecek ve bunları ekranda gösterecektir. Oluşturma, konsoldaki günlüğe kaydedilen nesnelerle gelecekteki etkileşimler (nesne özelliklerini genişletmek gibi) gibi, kesinlikle eşzamansız olarak gerçekleşecektir (hız sınırı güncellemelerine göre kısılacaktır).
Dolayısıyla konsol, günlüğe kaydettiğiniz değiştirilebilir nesneleri klonlayabilir (seri hale getirebilir) veya bunlara referansları depolayabilir. İlki derin / büyük nesnelerle iyi çalışmıyor. Ayrıca, en azından konsoldaki ilk işleme, muhtemelen nesnenin "mevcut" durumunu, yani oturum açıldığı zamandaki durumu gösterecektir - örneğinizde gördüğünüz Object {}
.
Ancak, özelliklerini daha fazla incelemek için nesneyi genişlettiğinizde, konsolun nesnenize ve özelliklerine yalnızca bir başvuru kaydetmesi olasıdır ve bunları şimdi görüntülemek, mevcut (zaten değiştirilmiş) durumlarını gösterecektir. Eğer üzerine tıklarsanız, örneğinizde mülkü +
görebilmeniz gerekir bar
.
Aşağıda , "düzeltmeyi" açıklamak için hata raporunda yayınlanan bir ekran görüntüsü verilmiştir :
Bu nedenle, bazı değerlere günlüğe kaydedildikten çok sonra başvurulabilir ve bunların değerlendirilmesi oldukça tembeldir ("gerektiğinde"). Bu tutarsızlığın en ünlü örneği, Chrome'un JavaScript konsolu dizileri değerlendirme konusunda tembel mi?
Geçici bir çözüm, örneğin yaparak nesnelerinizin her zaman serileştirilmiş anlık görüntülerini günlüğe kaydettiğinizden emin olmaktır console.log(JSON.stringify(obj))
. Bu, dairesel olmayan ve oldukça küçük nesneler için işe yarayacaktır. Ayrıca Safari'de console.log'un varsayılan davranışını nasıl değiştirebilirim? Konusuna bakın. .
Daha iyi çözüm, yürütmenin tamamen durduğu ve her noktada mevcut değerleri inceleyebileceğiniz hata ayıklama için kesme noktaları kullanmaktır. Günlük kaydını yalnızca serileştirilebilir ve değiştirilemez verilerle kullanın.