Wie zeige ich den Inhalt eines JavaScript-Objekts in einem Zeichenfolgenformat an, wie wir es tun? alert
eine Variable sind?
Auf die gleiche formatierte Weise möchte ich ein Objekt anzeigen.
javascript
serialization
javascript-objects
Maxjackie
quelle
quelle
console.log("", yourObject1, yourObject2, yourObject3, etc...);
. Eine kürzere Version ist einfach zu tunconsole.log(yourObject1, yourObject2, etc...);
.console.log('a string', aNumber, anObject)
Antworten:
Wenn Sie das Objekt zu Debugging-Zwecken drucken möchten, verwenden Sie den folgenden Code:
wird angezeigt:
Hinweis: Sie dürfen nur das Objekt protokollieren. Dies funktioniert beispielsweise nicht:
Hinweis ' : Sie können in der
log
Methode auch ein Komma verwenden. Die erste Zeile der Ausgabe ist die Zeichenfolge, und danach wird das Objekt gerendert:quelle
console.log(obj1, obj2)
sehr gut funktioniert, sodass Sie nichtconsole.log()
jedes Objekt aufrufen müssen, wenn Sie mehrere Variablen protokollieren. Denken Sie auch immer daran, alle derartigen Aufrufe in der Produktion zu entfernen, da dadurch Browser beschädigt werden, die sie nicht implementieren (z. B. Internet Explorer).console.log("id:"+obj);
wird nicht korrekt ausgegeben, da es einen String ausgibt, wie Sie ihn dort sehen. Sie müssen ihn wieconsole.log("id:"); console.log(obj);
console.log(JSON.stringify(obj))
oderconsole.dir(obj)
Verwenden Sie die native
JSON.stringify
Methode. Funktioniert mit verschachtelten Objekten und alle gängigen Browser unterstützen diese Methode.Link zur Mozilla API-Referenz und anderen Beispielen.
Verwenden Sie einen benutzerdefinierten JSON.stringify-Ersatz, wenn dieser Javascript-Fehler auftritt
quelle
console.log
dhconsole.log(JSON.stringify(obj,null, 4));
{}
für ein nicht leeres Objekt. Fragen Sie daher unbedingt nach,console.log(obj)
bevor Sie glauben, dass Ihr Objekt bei derstrigify()
Rückgabe leer ist{}
.quelle
console.dir(object)
::Beachten Sie, dass die
console.dir()
Funktion nicht dem Standard entspricht. Siehe MDN-Webdokumentequelle
console.dir
ist, dass Sie die Werte in Ihrer Konsole noch erweitern und lesen können, nachdem die Variable durch Müll gesammelt wurde. Dies wird in einem anderen SO-Artikel hier beschriebenconsole.dir
ist, dass beim Speichern der Konsole in einer Datei alle Eigenschaften wie erwartet in der Datei gespeichert sind. Das passiert nicht, wenn nur console.log verwendet wird.Versuche dies :
Dadurch wird die Stringify-Version des Objekts gedruckt. Anstelle
[object]
einer Ausgabe erhalten Sie also den Inhalt des Objekts.quelle
typeerror: Converting circular structure to JSON
?Nun, Firefox (danke an @Bojangles für detaillierte Informationen) hat eine
Object.toSource()
Methode, die Objekte als JSON und drucktfunction(){}
.Das reicht für die meisten Debugging-Zwecke, denke ich.
quelle
.toSource()
ist eigentlich nur Firefox . Ich dachte nur, ich würde es dich wissen lassen.Wenn Sie Alert verwenden möchten, um Ihr Objekt zu drucken, können Sie Folgendes tun:
alert("myObject is " + myObject.toSource());
Es sollte jede Eigenschaft und ihren entsprechenden Wert im Zeichenfolgenformat drucken.
quelle
Wenn Sie Daten in Tabellenform anzeigen möchten, können Sie diese verwenden
Tabelle kann sortiert werden, wenn Sie auf die Tabellenspalte klicken.
Sie können auch auswählen, welche Spalten angezeigt werden sollen:
Weitere Informationen zu console.table finden Sie hier
quelle
In NodeJS können Sie ein Objekt mit drucken
util.inspect(obj)
. Geben Sie unbedingt die Tiefe an, da sonst nur ein flacher Ausdruck des Objekts angezeigt wird.quelle
Funktion:
Verwendungszweck:
Beispiel:
http://jsfiddle.net/WilsonPage/6eqMn/
quelle
Einfach benutzen
Beispiel
Oder
Beachten Sie auch, dass Funktionen in Javascript als Objekte betrachtet werden.
Als zusätzliche Anmerkung:
Tatsächlich können Sie eine neue Eigenschaft wie diese zuweisen und auf console.log zugreifen oder sie in einer Warnung anzeigen
quelle
Benutze das:
quelle
Wie gesagt, der beste und einfachste Weg, den ich gefunden habe, war
quelle
navigator
.So drucken Sie das vollständige Objekt mit Node.js mit Farben als Bonus:
Die Farben sind natürlich optional. 'Tiefe: null' druckt das gesamte Objekt.
Die Optionen scheinen in Browsern nicht unterstützt zu werden.
Verweise:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
quelle
NB: In diesen Beispielen definiert yourObj das Objekt, das Sie untersuchen möchten.
Zunächst einmal meine am wenigsten bevorzugte und am häufigsten verwendete Art, ein Objekt anzuzeigen:
Dies ist die defakte Methode, um den Inhalt eines Objekts anzuzeigen
wird so etwas produzieren wie:
Ich denke, die beste Lösung besteht darin, durch die Objektschlüssel und dann durch die Objektwerte zu schauen, wenn Sie wirklich sehen möchten, was das Objekt enthält ...
Es wird ungefähr Folgendes ausgegeben: (oben abgebildet: die im Objekt gespeicherten Schlüssel / Werte)
Es gibt auch diese neue Option, wenn Sie ECMAScript 2016 oder neuer verwenden:
Dies führt zu einer ordentlichen Ausgabe: Die in einer früheren Antwort erwähnte Lösung:
console.log(yourObj)
Zeigt zu viele Parameter an und ist nicht die benutzerfreundlichste Art, die gewünschten Daten anzuzeigen . Aus diesem Grund empfehle ich, Schlüssel und Werte dann separat zu protokollieren.Next Up :
Jemand in einem früheren Kommentar schlug diesen vor, aber er hat bei mir nie funktioniert. Wenn es für jemand anderen in einem anderen Browser oder so funktioniert, dann ein dickes Lob! Ich werde den Code immer noch hier als Referenz einfügen! Gibt so etwas an die Konsole aus:
quelle
console.table(yourObj)
arbeitete für mich in Google Chrome Version 77.0.3865.90 (Official Build) (64-Bit). Danke für das Teilen!(Dies wurde meiner Bibliothek bei GitHub hinzugefügt. )
Das Rad hier neu erfinden! Keine dieser Lösungen hat für meine Situation funktioniert. Also habe ich schnell die Antwort von wilsonpage überarbeitet . Dieser dient nicht zum Drucken auf dem Bildschirm (über die Konsole, das Textfeld oder was auch immer). In solchen Situationen funktioniert es einwandfrei und funktioniert einwandfrei, wie vom OP angefordert, z
alert
. Viele Antworten hier beziehen sich nicht auf die Verwendungalert
als OP angefordert. Auf jeden Fall ist es jedoch für den Datentransport formatiert. Diese Version scheint ein sehr ähnliches Ergebnis zu liefern wietoSource()
. Ich habe nicht gegen getestetJSON.stringify
, aber ich gehe davon aus, dass dies ungefähr das Gleiche ist. Diese Version ähnelt eher einer Polydatei, sodass Sie sie in jeder Umgebung verwenden können. Das Ergebnis dieser Funktion ist eine gültige Javascript-Objektdeklaration.Ich würde nicht bezweifeln, dass so etwas schon irgendwo auf SO war, aber es war nur kürzer, es zu schaffen, als eine Weile nach Antworten zu suchen. Und da diese Frage mein Top-Hit bei Google war, als ich anfing, danach zu suchen; Ich dachte, es hier zu platzieren könnte anderen helfen.
Das Ergebnis dieser Funktion ist jedoch eine Zeichenfolgendarstellung Ihres Objekts, selbst wenn Ihr Objekt eingebettete Objekte und Arrays enthält und selbst wenn diese Objekte oder Arrays noch weitere eingebettete Objekte und Arrays enthalten. (Ich habe gehört, dass du gerne trinkst? Also habe ich dein Auto mit einem Kühler gepimpt. Und dann habe ich deinen Kühler mit einem Kühler gepimpt. Also kann dein Kühler trinken, während du cool bist.)
Arrays werden mit
[]
statt gespeichert{}
und haben daher keine Schlüssel / Wert-Paare, sondern nur Werte. Wie normale Arrays. Daher werden sie wie Arrays erstellt.Außerdem werden alle Zeichenfolgen (einschließlich Schlüsselnamen) in Anführungszeichen gesetzt. Dies ist nur erforderlich, wenn diese Zeichenfolgen Sonderzeichen enthalten (z. B. ein Leerzeichen oder einen Schrägstrich). Aber ich hatte keine Lust, dies zu entdecken, nur um einige Zitate zu entfernen, die sonst immer noch gut funktionieren würden.
Diese resultierende Zeichenfolge kann dann verwendet werden
eval
oder einfach in eine Var-Through-Zeichenfolgenmanipulation ausgegeben werden. So erstellen Sie Ihr Objekt erneut aus Text.Lassen Sie mich wissen, wenn ich alles durcheinander gebracht habe, funktioniert gut in meinen Tests. Die einzige Möglichkeit, einen Typ zu erkennen,
array
bestand darin, das Vorhandensein von zu überprüfenlength
. Da Javascript Arrays wirklich als Objekte speichert, kann ich nicht nach Typ suchenarray
(es gibt keinen solchen Typ!). Wenn jemand einen besseren Weg kennt, würde ich ihn gerne hören. Wenn Ihr Objekt auch eine Eigenschaft mit dem Namenlength
hat, wird es von dieser Funktion fälschlicherweise als Array behandelt.BEARBEITEN: Prüfung für Objekte mit Nullwert hinzugefügt. Danke Brock Adams
BEARBEITEN: Unten ist die feste Funktion, um unendlich rekursive Objekte drucken zu können. Dies wird nicht wie
toSource
bei FFtoSource
gedruckt, da die unendliche Rekursion einmal gedruckt wird, wobei diese Funktion sie sofort beendet. Diese Funktion läuft langsamer als die oben beschriebene, daher füge ich sie hier hinzu, anstatt die obige Funktion zu bearbeiten, da sie nur benötigt wird, wenn Sie Objekte übergeben möchten, die irgendwo wieder mit sich selbst verknüpft sind.Prüfung:
Ergebnis:
HINWEIS: Der Versuch zu drucken
document.body
ist ein schreckliches Beispiel. Zum einen druckt FF bei Verwendung nur eine leere ObjektzeichenfolgetoSource
. Und wenn Sie die obige Funktion verwenden, stürzt FF abSecurityError: The operation is insecure.
. Und Chrome wird weiter abstürzenUncaught RangeError: Maximum call stack size exceeded
. Es war klar, dassdocument.body
es nicht in einen String konvertiert werden sollte. Weil es entweder zu groß ist oder gegen Sicherheitsrichtlinien verstößt, um auf bestimmte Eigenschaften zuzugreifen. Es sei denn, ich habe hier oben etwas durcheinander gebracht, erzähl es doch!quelle
ObjToSource(document.body)
zum Beispiel.ObjToSource(document.body)
wegen der unendlichen Rekursion tun . Auchdocument.body.toSource()
in FireFox wird ein leeres Objekt zurückgegeben.document.body
immer noch nicht gedruckt werden. Siehe Anmerkung.document.body
war nur eine Abkürzung, um auf einige große Probleme hinzuweisen. Sie haben jetzt das Schlimmste behoben und ich habe bereits gestimmt. (Obwohl ich glaube, dass ein anderer Ansatz damit umgehen könntedocument.body
. Die meisten Antworten hier würden auch nicht gut dagegen sein.)Wenn Sie das Objekt in voller Länge drucken möchten, können Sie verwenden
Wenn Sie das Objekt drucken möchten, indem Sie es in die Zeichenfolge konvertieren, dann
quelle
JSON.stringify
wenn Sie versuchen, mit einem Zeichenfolgenobjekt zu verketten. Wenn Sie verwendenconsole.log(object)
, sollte es den Inhalt des Objekts hübsch druckenHier ist eine Möglichkeit, dies zu tun:
quelle
Ich brauchte eine Möglichkeit, das Objekt rekursiv zu drucken, was die Antwort von pagewil lieferte (Danke!). Ich habe es ein wenig aktualisiert, um eine Möglichkeit zum Drucken bis zu einer bestimmten Ebene einzuschließen und Abstände hinzuzufügen, damit es basierend auf der aktuellen Ebene, in der wir uns befinden, richtig eingerückt ist, damit es besser lesbar ist.
Verwendungszweck:
quelle
Ich benutze immer
console.log("object will be: ", obj, obj1)
. Auf diese Weise muss ich die Problemumgehung mit stringify nicht mit JSON durchführen. Alle Eigenschaften des Objekts werden schön erweitert.quelle
Eine andere Möglichkeit, Objekte in der Konsole anzuzeigen, ist mit
JSON.stringify
. Überprüfen Sie das folgende Beispiel:quelle
Javascript-Funktion
Objekt drucken
über print_r in Javascript
quelle
Wo
object
ist dein Objekt?oder Sie können dies in Chrome Dev Tools, Registerkarte "Konsole" verwenden:
console.log(object);
quelle
console.log(Object.keys(object));
obwohl ich weiß, dass nur die eigenschaftsschlüssel gedruckt werden, reicht es mir für meine zwecke;)Objekt annehmen
obj = {0:'John', 1:'Foo', 2:'Bar'}
Objektinhalt drucken
Konsolenausgabe (Chrome DevTools):
Ich hoffe, das hilft!
quelle
Ich bevorzuge die Verwendung
console.table
, um ein klares Objektformat zu erhalten. Stellen Sie sich also vor, Sie haben dieses Objekt:Und Sie werden unten eine ordentliche und lesbare Tabelle wie diese sehen:
quelle
Eine kleine Hilfsfunktion, die ich in meinen Projekten immer zum einfachen, schnellen Debuggen über die Konsole verwende. Inspiration von Laravel.
Verwendungszweck
dd(123.55);
Ausgänge:quelle
Sie können auch das ES6-Vorlagenliteral-Konzept verwenden, um den Inhalt eines JavaScript-Objekts in einem Zeichenfolgenformat anzuzeigen.
quelle
Ich habe die Druckmethode von pagewil verwendet und es hat sehr gut funktioniert.
Hier ist meine leicht erweiterte Version mit (schlampigen) Einrückungen und unterschiedlichen Trennzeichen für Prop / Ob:
quelle
Eine weitere Modifikation des Pagewils-Codes ... er druckt nichts anderes als Strings aus und lässt die Zahlen- und Booleschen Felder leer, und ich habe den Tippfehler für den zweiten Typ von direkt innerhalb der von Megaboss erstellten Funktion behoben.
quelle
Hier ist die Funktion.
Es kann Objekte mit lesbarem Tabulatoreinzug anzeigen.
quelle