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à optionsnell'argomento facoltativo ; falseutilizza l'output multilinea incondizionatamente , mentre truedisabilita 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' breakLengthopzione 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
modulenel 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 objo 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.