Una raccolta delle molte risposte utili da (almeno) Node.js v0.10.33
(stabile) / v0.11.14
(instabile) presumibilmente attraverso (almeno) v7.7.4
(la versione attuale dall'ultimo aggiornamento a questa risposta). Punta del cappello a Rory O'Kane per il suo aiuto.
tl; dr
Per ottenere l'output desiderato per l'esempio nella domanda, utilizzare console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Perché no util.inspect()
? Perché è già al centro dell'output diagnostico: console.log()
e console.dir()
così come il REPL Node.js usano util.inspect()
implicitamente . Generalmente non è necessariorequire('util')
e chiamare util.inspect()
direttamente.
Dettagli sotto.
- REPL : stampa implicitamente il valore restituito di qualsiasi espressione
util.inspect()
con colorazione di sintassi ;
cioè, basta digitare il nome di una variabile e premere Invio per stampare una versione ispezionata del suo valore; per esempio:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
stampa automaticamente le rappresentazioni di oggetti e array , ma produce output multilinea solo quando necessario .
Il comportamento di stampa carina può essere controllato da compact
proprietà options
nell'argomento facoltativo ; false
utilizza l'output multilinea incondizionatamente , mentre true
disabilita del tutto la stampa carina; può anche essere impostato su un numero (il valore predefinito è 3
) per controllare il comportamento condizionale su più righe - vedere i documenti .
Per impostazione predefinita, l'output è racchiuso in circa 60 caratteri grazie, Shrey
, indipendentemente dal fatto che l'output sia inviato a un file o a un terminale. In pratica, poiché le interruzioni di riga si verificano solo ai confini delle proprietà , si finisce spesso con linee più brevi, ma possono anche essere più lunghe (ad esempio, con valori di proprietà lunghi).
In v6.3.0 + è possibile utilizzare l' breakLength
opzione per ignorare il limite di 60 caratteri; se lo si imposta su Infinity
, tutto viene emesso su una sola riga.
Se vuoi un maggiore controllo su pretty-printing, considera l'utilizzo JSON.stringify()
con un terzo argomento , ma nota quanto segue:
- Non riesce con oggetti con riferimenti circolari , ad esempio
module
nel contesto globale.
- Metodi (funzioni) NON saranno inclusi nella progettazione.
- Non puoi scegliere di mostrare proprietà nascoste (non enumerabili).
- Esempio di chiamata:
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
oggetto options (secondo argomento):
Opzioni opzionali passare un oggetto che modifica alcuni aspetti della stringa formattata; alcune delle proprietà supportate sono:
Consulta gli ultimi documenti Node.js per l'elenco completo corrente.
showHidden
- if
true
, verranno mostrate anche le proprietà non enumerabili dell'oggetto [quelle designate per non apparire quando si usa for keys in obj
o Object.keys(obj)
]. L'impostazione predefinita è false
.
depth
- indica ispezionare quante volte ricorrere durante la formattazione dell'oggetto. Ciò è utile per ispezionare oggetti complessi di grandi dimensioni. Il valore predefinito è 2. Per farlo ricorrere indefinitamente, passa
null
.
colors
- se vero, l'output sarà disegnato con codici colore ANSI. L'impostazione predefinita è
false
. I colori sono personalizzabili [… - vedi link].
customInspect
- se
false
, quindi le inspect()
funzioni personalizzate definite sugli oggetti da ispezionare non verranno chiamate. L'impostazione predefinita è true
.
util.format()
segnaposto per stringhe di formato (1 ° argomento)
Alcuni dei segnaposto supportati sono:
Consulta gli ultimi documenti Node.js per l'elenco completo corrente.
%s
- Corda.
%d
- Numero (sia intero che mobile).
%j
- JSON.
%%
- segno di percentuale singolo ('%'). Questo non consuma un argomento.