Object Dump JavaScript

89

Gibt es ein Add-On / eine Anwendung von Drittanbietern oder eine Möglichkeit, ein Objektzuordnungs-Dumping im Skript-Debugger für ein JavaScript-Objekt durchzuführen?

Hier ist die Situation ... Ich habe eine Methode, die zweimal aufgerufen wird, und jedes Mal ist etwas anders. Ich bin nicht sicher, was anders ist, aber etwas ist. Wenn ich also alle Eigenschaften von window (oder zumindest window.document) in einen Texteditor kopieren könnte, könnte ich den Status zwischen den beiden Aufrufen mit einem einfachen Dateidiff vergleichen. Gedanken?

Jessy Houle
quelle
Mögliches Duplikat von Wie kann ich ein JavaScript-Objekt anzeigen?
Jan Hudec

Antworten:

61

Firebug +console.log(myObjectInstance)

Darin Dimitrov
quelle
4
... und schauen Sie dann in die Firebug-Konsole und nicht in die Standard- Javascript-Konsole . :-)
Towi
3
IE hat eine Konsole, aber die Protokollierung eines Objekts wird zurückgegeben [object Object]. Nicht sehr nützlich
Steve Robbins
5
@SteveRobbins, wer verwendet heutzutage IE, um Webanwendungen zu entwickeln? Persönlich ist die einzige Verwendung, die ich bisher für Internet Explorer gefunden habe, das Herunterladen eines echten Webbrowsers, sobald ich mein Windows-Betriebssystem neu installiert habe. Übrigens ist dies das einzige Mal, dass ich diese Software-Sicherheit starte.
Darin Dimitrov
8
Jeder Entwickler, der gängige Browser unterstützt. Wenn das Problem nur im IE besteht, kann es nur im IE getestet werden, sodass Sie den Browser verwenden müssen.
Steve Robbins
2
Und wenn Sie node.js und ein Terminal verwenden .. Es gibt keinen Firebug?
Cheruvim
134
console.log("my object: %o", myObj)

Andernfalls wird eine Zeichenfolgendarstellung angezeigt, die manchmal Folgendes anzeigt:

[object Object]

oder solche.

Tim
quelle
3
druckt einfach [Objekt Objekt] für Chrome und Firefox. <Achselzucken>
Slashdottir
1
@slashdottir Es funktioniert absolut in Chrome und FF. Ich benutze es in Chrome mindestens jede Woche und gelegentlich in FF.
Tim
1
@ Tim: Du hast recht, es funktioniert. bitte entschuldige mich. Benutzer err
slashdottir
Wie um alles in der Welt ist dies nicht die ausgewählte Antwort? Zum Glück wurde dies an meinem Geburtstag vor 4 Jahren beantwortet, als ich js nicht benutzte.
Joey Carson
2
In Meteor (serverseitig) wird gedruckt my object: %o. Nicht sehr hilfreich :)
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;
}
zhongshu
quelle
4
Aktualisieren Sie Ihren Code durch Ändern des Funktionsnamens, da er beim Rekursionsaufruf "dump" heißt, während die Zeit als "mydump" definiert wird
Vikas
7
Kopieren und Einfügen von: binnyva.blogspot.com/2005/10/…
utopianheaven
1
Dies tötet Chrome und Firefox mit "zu viel Rekursion", wenn es verwendet wird, um ein Abfrageobjekt zu untersuchen
slashdottir
@slashdottir es ist einfach zu beheben, indem Sie überprüfenif (level > 10) return level_padding + '<< too deep >>';
John Henckel
Die "zu große Rekursion" erfolgt aufgrund eines Zirkelverweises (wenn der untergeordnete Parameter eines Objekts auf sein übergeordnetes Objekt verweist). Kann gelöst werden, indem alle Eltern mit dem aktuellen Wert gespeichert werden. Wenn der aktuelle Wert mit einem der Eltern übereinstimmt, hören Sie auf, weiter zu graben.
Alex Velickiy
42

Wenn Sie Chrome, Firefox oder IE10 + verwenden, können Sie die Konsole erweitern und verwenden

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

für eine präzise, ​​browserübergreifende Lösung.

Chris HG
quelle
Ich mag diesen. Insbesondere für Browser, die kein Objekt-Dumping unterstützen.
Aley
Und vielleicht ersetzen Sie das "else console.log (Objekt);" mit einem Aufruf einer benutzerdefinierten Durchlauffunktion wie in stackoverflow.com/a/3011557/2236012 oben? ...;)
CB
@CB "zu viel Rekursion" und ein eingefrorener Browser ist das, was mich in Firefox und Chrome bringt.
Slashdottir
3
JSON.stringify kann zyklische Strukturen nicht serialisieren. Es funktioniert nicht für alle Objekte.
Grzegorz Luczywo
24

Benutz einfach:

console.dir(object);

Sie erhalten eine schöne anklickbare Objektdarstellung. Funktioniert in Chrome und Firefox

Mons Droide
quelle
1
Chrome und Firefox geben [Objekt Objekt]
Slashdottir
Sie können es in der Konsole testen (Hit F12) mit console.dir({bar:"foo"}); Überschreibt Ihr Objekt die toString-Methode?
Mons Droide
scheint zumindest in der Konsole zu funktionieren. wahrscheinlich userr von mir. danke
slashdottir
so ein süßes Feature
Tomalone
12

Für Chrom / Chrom

console.log(myObj)

oder es ist gleichwertig

console.debug(myObj)
kaznovac
quelle
4

Mit console.log(object)wird Ihr Objekt in die Javascript-Konsole geworfen, aber das ist nicht immer das, was Sie wollen. Mit using JSON.stringify(object)werden die meisten Inhalte zurückgegeben, die in einer Variablen gespeichert werden sollen, z. B. um sie an eine Textbereichseingabe zu senden und den Inhalt an den Server zurückzusenden.

Sebastian
quelle