Nesne Dökümü JavaScript


89

Bir JavaScript nesnesi için komut dosyası hata ayıklayıcısında 3. taraf eklenti / uygulaması veya nesne eşleme dökümü gerçekleştirmenin bir yolu var mı?

İşte durum ... İki kez çağrılan bir yöntemim var ve her seferinde bir şeyler farklı. Neyin farklı olduğundan emin değilim, ama bir şey var. Bu nedenle, pencerenin tüm özelliklerini (veya en azından window.document'i) bir metin düzenleyicisine dökebilirsem, iki çağrı arasındaki durumu basit bir dosya farkıyla karşılaştırabilirim. Düşünceler?


Yanıtlar:


61

Firebug +console.log(myObjectInstance)


4
... ve sonra standart Javascript konsoluna değil Firebug konsoluna bakın . :-)
towi

3
IE'nin bir konsolu vardır, ancak bir nesnenin günlüğe kaydedilmesi geri döner [object Object]. Pek kullanışlı değil
Steve Robbins

5
@SteveRobbins, günümüzde web uygulamaları geliştirmek için IE'yi kim kullanıyor? Şahsen, Internet Explorer için şimdiye kadar bulduğum tek kullanım, Windows işletim sistemimi yeniden yükledikten sonra gerçek bir web tarayıcısı indirmektir. Bu arada, bu yazılım barışını başlattığım tek zaman bu.
Darin Dimitrov

8
Büyük tarayıcıları destekleyen herhangi bir geliştirici. Sorun yalnızca IE'de mevcutsa, yalnızca IE'de test edilebilir, bu nedenle tarayıcıyı kullanmanız gerekir.
Steve Robbins

2
Ve node.js ve bir terminal kullanıyorsanız .. Firebug yok ??
Cheruvim

136
console.log("my object: %o", myObj)

Aksi takdirde, bazen şunu görüntüleyen bir dize temsiliyle sonuçlanırsınız:

[object Object]

ya da bunun gibi.


3
yalnızca Chrome ve Firefox için [object Object] öğesini yazdırır. <shrug>
slashdottir

1
@slashdottir Kesinlikle Chrome ve FF'de çalışır. En azından her hafta Chrome'da ve ara sıra FF'de kullanıyorum.
Tim

1
@Tim: haklısın, işe yarıyor. Affedersiniz lütfen. kullanıcı hatası
slashdottir

Nasıl olur da bu seçilen cevap değil? Bunun 4 yıl önce js kullanmadığım doğum günümde yanıtlandığı için şanslıyım.
Joey Carson

2
Meteor'da (sunucu tarafı) yazdırır my object: %o. Pek yardımcı değil :)
Erdal G.

45
function mydump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;

    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') {  
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { 
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += mydump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { 
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}

4
İşlev adını değiştirerek kodunuzu güncelleyin, özyineleme çağrısında olduğu gibi, zaman "mydump" olarak tanımlanırken buna "döküm" denir
Vikas


1
bu, bir jquery nesnesini incelemek için kullanıldığında Chrome ve Firefox'u "çok fazla özyineleme" ile öldürür
slashdottir

@slashdottir kontrol ederek düzeltmesi kolaydırif (level > 10) return level_padding + '<< too deep >>';
John Henckel

"Çok fazla özyineleme", döngüsel başvuru nedeniyle gerçekleşir (bir nesnenin alt parametresi, üst nesnesine başvurduğunda). Mevcut değerin tüm ebeveynlerini hatırlayarak çözülebilir ve mevcut değer ebeveyninkilerden biriyle eşleşirse, daha fazla kazmayı bırakın.
Alex Velickiy

42

Chrome, Firefox veya IE10 + kullanıyorsanız neden konsolu genişletip kullanmıyorsunuz?

(function() {
    console.dump = function(object) {
        if (window.JSON && window.JSON.stringify)
            console.log(JSON.stringify(object));
        else
            console.log(object);
    };
})();

kısa ve çapraz tarayıcı çözümü için.


Bunu beğendim. Özellikle nesne dökümünü desteklemeyen tarayıcılar için.
Aley

Ve belki bu "else console.log (nesne)"; Yukarıdaki stackoverflow.com/a/3011557/2236012'deki gibi özel bir geçiş işlevi çağrısıyla ? ...;)
CB

@CB "çok fazla özyineleme" ve donmuş bir tarayıcı bu bana Firefox ve Chrome'da ulaşıyor.
slashdottir

3
JSON.stringify döngüsel yapıları serileştiremez. Tüm nesneler için çalışmayacaktır.
Grzegorz Luczywo

24

Sadece kullan:

console.dir(object);

Hoş bir tıklanabilir nesne sunumu elde edeceksiniz. Chrome ve Firefox'ta çalışır


1
Chrome ve Firefox [object Object] 'i veriyor
slashdottir

Bunu Konsolda (F12 Hit) ile test edebilirsiniz console.dir({bar:"foo"}); . Nesneniz toString yönteminin üzerine yazıyor mu?
mons droid

en azından konsolda çalışıyor gibi görünüyor. muhtemelen benim tarafımdan kullanılıyor. teşekkür ederim
slashdottir

çok tatlı bir özellik
tomalone

12

Chrome / Chromium için

console.log(myObj)

veya eşdeğeri

console.debug(myObj)


4

Kullanmak console.log(object)nesnenizi Javascript konsoluna atacaktır, ancak her zaman istediğiniz şey bu değildir. Kullanımı JSON.stringify(object), bir değişkende depolanacak çoğu şeyi döndürür, örneğin onu bir metin alanı girişine göndermek ve içeriği sunucuya geri göndermek için.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.