console.log()
Wie kann ich beim Debuggen mit das vollständige Objekt abrufen?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Ausgänge:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Ich möchte aber auch den Inhalt des Eigentums sehen f
.
javascript
node.js
debugging
console.log
Michał Perłakowski
quelle
quelle
v0.10.33
console.log()
implizit fürutil.inspect()
seine Argumente, vorausgesetzt, der erste ist keine Formatzeichenfolge. Wenn Sie zufrieden mitutil.inspect()
‚s Standard - Optionen, einfachconsole.log(myObject)
zu tun - keine Notwendigkeit zu verlangenutil
;console.dir()
tut dasselbe, akzeptiert aber nur das zu inspizierende Objekt; Ab mindestensv0.11.14
können Sie das Optionsobjektutil.inspect()
als zweites Argument übergeben. Meine Antwort enthält weitere Details.console.log(obj)
es noch drucke [Objekt] für tief verschachtelte Objekte :( Ich wünschte wirklich, es würde sich so verhalten, wie Sie es beschreiben.console.log()
ist ausnahmslos auf 2 Ebenen beschränkt (da dieutil.inspect()
Standardeinstellung verwendet wird, ohne dass Sie sie ändern können);console.dir()
hat standardmäßig das gleiche Limit, aber Sie können ein Optionsobjekt als zweites Argument übergeben, um dieses zu ändern (das an übergeben wirdutil.inspect()
; beachten Sie jedoch, dassconsole.dir()
immer nur 1 Objekt gleichzeitig gedruckt werden kann. Verwenden Sie zum Drucken mit unbegrenzter Tiefeconsole.dir(myObject, { depth: null })
.console.dir(myObject, { depth: null })
ist Arbeit für michSie können verwenden
JSON.stringify
und erhalten einige schöne Einrückungen sowie vielleicht leichter zu merkende Syntax.Das dritte Argument legt die Einrückungsstufe fest, sodass Sie diese nach Bedarf anpassen können.
Weitere Details hier bei Bedarf:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
quelle
console.log(JSON.stringify(myObject, null, 4));
ziemlich cool! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Eine Zusammenstellung der vielen nützlichen Antworten von (mindestens) Node.js
v0.10.33
(stabil) /v0.11.14
(instabil) vermutlich bis (mindestens)v7.7.4
(die aktuelle Version zum letzten Update dieser Antwort). Tipp des Hutes an Rory O'Kane für seine Hilfe.tl; dr
Verwenden Sie
console.dir()
: Um die gewünschte Ausgabe für das Beispiel in der Frage zu erhalten :Warum nicht
util.inspect()
? Weil es bereits das Herzstück der Diagnoseausgabe ist:console.log()
undconsole.dir()
ebenso wie die implizite Verwendung vonutil.inspect()
Node.js REPL . Es ist in der Regel nicht erforderlich,require('util')
util.inspect()
direkt anzurufen .Details unten.
console.log()
(und sein Aliasconsole.info()
):util.inspect()
wird automatisch auf jedes Argument angewendet:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
util.inspect()
, was zwei bemerkenswerte Einschränkungen impliziert:console.log()
, müssen Sie stattdessen Folgendes verwendenconsole.dir()
:console.dir(myObject, { depth: null }
Drucke mit unbegrenzter Tiefe ; siehe unten.util.format()
, um die verbleibenden Argumente basierend auf der Formatzeichenfolge zu drucken (siehe unten). z.B:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
util.inspect()
-Stil.%j
ist NICHT hübsch gedruckt.console.dir()
::util.inspect()
- im Wesentlichen ein Wrapper fürutil.inspect()
standardmäßig ohne Optionen; z.B:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
util.inspect()
- siehe unten an; z.B:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
util.inspect()
mit Syntaxfarbe aus .Wenn Sie also nur den Namen einer Variablen eingeben und die Eingabetaste drücken, wird eine überprüfte Version ihres Werts gedruckt. z.B:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
druckt Objekt- und Array- Darstellungen automatisch hübsch aus , erzeugt jedoch nur bei Bedarf eine mehrzeilige Ausgabe .Das hübsche Druckverhalten kann durch die
compact
Eigenschaft im optionalenoptions
Argument gesteuert werden .false
verwendet die mehrzeilige Ausgabe bedingungslos , währendtrue
das hübsche Drucken insgesamt deaktiviert wird. Es kann auch eine Zahl festgelegt werden (die Standardeinstellung ist3
), um das bedingte mehrzeilige Verhalten zu steuern - siehe Dokumente .Standardmäßig wird die Ausgabe dank Shrey mit etwa 60 Zeichen umbrochen , unabhängig davon, ob die Ausgabe an eine Datei oder ein Terminal gesendet wird. Da Zeilenumbrüche in der Praxis nur an Eigenschaftsgrenzen auftreten , werden häufig kürzere Zeilen angezeigt, die jedoch auch länger sein können (z. B. bei langen Eigenschaftswerten).
In Version 6.3.0 + können Sie die
breakLength
Option verwenden, um die Beschränkung auf 60 Zeichen zu überschreiben. Wenn Sie es einstellen,Infinity
wird alles in einer einzigen Zeile ausgegeben .Wenn Sie mehr Kontrolle über das hübsche Drucken wünschen, sollten Sie
JSON.stringify()
ein drittes Argument verwenden . Beachten Sie jedoch Folgendes:module
im globalen Kontext.JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
Optionsobjekt (2. Argument):Es kann ein optionales Optionsobjekt übergeben werden, das bestimmte Aspekte der formatierten Zeichenfolge ändert. Einige der unterstützten Eigenschaften sind:
Die aktuelle vollständige Liste finden Sie in den neuesten Node.js-Dokumenten .
showHidden
true
, werden auch die nicht aufzählbaren Eigenschaften des Objekts angezeigt [diejenigen, die bei Verwendung vonfor keys in obj
oderObject.keys(obj)
nicht angezeigt werden sollen]. Der Standardwert istfalse
.depth
null
.colors
false
. Farben sind anpassbar [… - siehe Link].customInspect
false
, werden benutzerdefinierteinspect()
Funktionen, die für die zu inspizierenden Objekte definiert wurden, nicht aufgerufen. Der Standardwert isttrue
.util.format()
Platzhalter für Formatzeichenfolgen (1. Argument)Einige der unterstützten Platzhalter sind:
Die aktuelle vollständige Liste finden Sie in den neuesten Node.js-Dokumenten .
%s
- String.%d
- Zahl (sowohl Ganzzahl als auch Gleitkomma).%j
- JSON.%%
- einzelnes Prozentzeichen ('%'). Dies verbraucht kein Argument.quelle
console.dir(...)
auf die gesamte Eingabe zu verzichten:show = (v, depth=null)=> console.dir(v,{depth:depth})
und sie dann soshow(variable)
oder so aufzurufenshow(variable, depth=1)
.Eine andere einfache Methode besteht darin, es in json zu konvertieren
quelle
utils
:)Versuche dies:
quelle
Seit Node.js 6.4.0 kann dies elegant gelöst werden mit
util.inspect.defaultOptions
:quelle
Vielleicht
console.dir
ist alles was du brauchst.http://nodejs.org/api/console.html#console_console_dir_obj
Verwenden Sie die Option util, wenn Sie mehr Kontrolle benötigen.
quelle
options
Objekt noch nicht an weiterutil.inspect
.util.inspect()
.Sie können auch tun
quelle
Eine gute Möglichkeit, Objekte zu untersuchen, ist die Verwendung der Option node --inspect mit Chrome DevTools for Node .
Öffnen Sie
chrome://inspect/#devices
in Chrome und klicken Sie auf Dedicated DevTools for Node öffnenJetzt ist jedes protokollierte Objekt im Inspektor verfügbar, wie normales JS, das in Chrome ausgeführt wird.
Der Inspektor muss nicht erneut geöffnet werden. Er stellt automatisch eine Verbindung zum Knoten her, sobald der Knoten gestartet oder neu gestartet wird. Sowohl --inspect als auch Chrome DevTools for Node sind in älteren Versionen von Node und Chrome möglicherweise nicht verfügbar.
quelle
node.exe --inspect index.js
Beide Verwendungen können angewendet werden:
quelle
Ich denke, das könnte für Sie nützlich sein.
Wie in dieser Antwort erwähnt :
quelle
Sie können
inspect()
Ihrem Objekt einfach eine Methode hinzufügen , die die Darstellung des Objekts inconsole.log
Nachrichten überschreibtz.B:
Anschließend wird Ihr Objekt sowohl in console.log als auch in der Node-Shell nach Bedarf dargestellt
quelle
Ein einfacher Trick wäre das
debug
Hinzufügen eines ModulsDEBUG_DEPTH=null
als Umgebungsvariable beim Ausführen des SkriptsEx.
DEBUG = * DEBUG_DEPTH = null node index.js
In deinem Code
quelle
Der Knoten REPL verfügt über eine integrierte Lösung zum Überschreiben der Anzeige von Objekten (siehe hier) .
quelle
Einfachste Option:
quelle
myObject
bis zu einer beliebigen TiefeJSON.stringify ()
Ideal für die eingehende Prüfung von Datenobjekten. Dieser Ansatz funktioniert für verschachtelte Arrays und verschachtelte Objekte mit Arrays.
quelle