In Safari ohne Add-Ons (und in den meisten anderen Browsern) console.log
wird das Objekt im letzten Ausführungsstatus angezeigt, nicht im Status, in dem console.log
es aufgerufen wurde.
Ich muss das Objekt klonen, nur um es über auszugeben console.log
, um den Status des Objekts in dieser Zeile zu erhalten.
Beispiel:
var test = {a: true}
console.log(test); // {a: false}
test.a = false;
console.log(test); // {a: false}
Antworten:
Ich denke du suchst
console.dir()
.console.log()
macht nicht das, was Sie wollen, weil es einen Verweis auf das Objekt druckt und es sich ändert, wenn Sie es öffnen.console.dir
druckt ein Verzeichnis der Eigenschaften im Objekt zum Zeitpunkt des Aufrufs.Die folgende JSON-Idee ist gut. Sie könnten sogar die JSON-Zeichenfolge analysieren und ein durchsuchbares Objekt erhalten, wie es Ihnen .dir () geben würde:
console.log(JSON.parse(JSON.stringify(obj)));
quelle
console.log
undconsole.dir
console.dir
funktioniert bei mir nicht in Chrome (v33). Hier ist ein Vergleich der Lösungen, die Menschen angeboten haben: jsfiddle.net/luken/M6295Wenn ich den Status zum Zeitpunkt der Protokollierung anzeigen möchte, konvertiere ich ihn einfach in eine JSON-Zeichenfolge.
quelle
function odump(o){ console.log($.parseJSON(JSON.stringify(o))); }
Vanilla JS:
@ evans Antwort scheint hier am besten zu sein. Verwenden Sie einfach (ab) JSON.parse / stringify, um effektiv eine Kopie des Objekts zu erstellen.
JQuery-spezifische Lösung:
Mit können Sie zu einem bestimmten Zeitpunkt einen Schnappschuss eines Objekts erstellen
jQuery.extend
Was hier tatsächlich passiert, ist, dass jQuery mit dem ein neues Objekt erstellt
test
Inhalt Objekts erstellt und dieses protokolliert (damit es sich nicht ändert).AngularJS (1) spezifische Lösung:
Angular bietet eine
copy
Funktion, die mit demselben Effekt verwendet werden kann:angular.copy
Vanilla JS-Wrapper-Funktion:
Hier ist eine Funktion, die umschließt,
console.log
aber eine Kopie aller Objekte erstellt, bevor sie abgemeldet werden.Ich habe dies als Antwort auf einige ähnliche, aber weniger robuste Funktionen in den Antworten geschrieben. Es unterstützt mehrere Argumente und versucht nicht , Dinge zu kopieren, wenn es sich nicht um reguläre Objekte handelt.
Anwendungsbeispiel :
consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})
quelle
Das
> Object
in der Konsole zeigt nicht nur den aktuellen Status. Das Lesen des Objekts und seiner Eigenschaften wird verschoben, bis Sie es erweitern.Beispielsweise,
Erweitern Sie dann den ersten Aufruf, es ist richtig, wenn Sie es tun, bevor der zweite
console.log
zurückkehrtquelle
Mit dem Hinweis von Xeon06 können Sie seinen JSON in einem Objekt analysieren. Hier ist die Protokollfunktion, mit der ich jetzt meine Objekte entleere:
quelle
Ich habe ein Dienstprogramm definiert:
und wenn ich mich an der Konsole anmelden möchte, mache ich einfach:
Es funktioniert sehr gut!
quelle
Möglicherweise möchten Sie das Objekt auf eine für Menschen lesbare Weise protokollieren:
Dadurch wird das Objekt mit 2 Leerzeichen auf jeder Ebene eingerückt.
Wie kann ich JSON mit JavaScript hübsch drucken?
quelle
Es besteht die Möglichkeit, eine Debugger-Bibliothek zu verwenden.
https://debugjs.net/
Fügen Sie das Skript einfach in Ihre Webseite ein und fügen Sie Protokollanweisungen ein.
Protokollierung
quelle
Ich werde vielleicht erschossen, weil ich das vorgeschlagen habe, aber das kann noch einen Schritt weiter gehen. Wir können das Konsolenobjekt selbst direkt erweitern, um es klarer zu machen.
Ich weiß nicht, ob dies zu einer Art Bibliothekskollision / Kernschmelze / Riss im Raumzeitkontinuum führen wird. Aber es funktioniert wunderbar in meinen qUnit-Tests. :) :)
quelle
Aktualisieren Sie einfach die Seite, nachdem Sie die Konsole geöffnet haben, oder öffnen Sie die Konsole, bevor Sie die Anforderung an die Zielseite senden.
quelle
Drucken Sie einfach das gesamte Objekt auf der Konsole.
quelle