Une compilation des nombreuses réponses utiles de (au moins) Node.js v0.10.33
(stable) / v0.11.14
(instable) vraisemblablement à travers (au moins) v7.7.4
(la version actuelle est celle de la dernière mise à jour de cette réponse). Coup de chapeau à Rory O'Kane pour son aide.
tl;dr
Pour obtenir la sortie souhaitée pour l'exemple de la question, utilisez console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Pourquoi pas ? util.inspect()
? Parce que c'est déjà au cœur de la sortie du diagnostic : console.log()
y console.dir()
ainsi que le REPL Node.js utiliser util.inspect()
implicitement . C'est généralement no nécessaire pour require('util')
et appeler util.inspect()
directement.
Détails ci-dessous.
-
console.log()
(et son alias, console.info()
):
-
Si le 1er argument n'est PAS une chaîne de format :
util.inspect()
est automatiquement appliqué à chaque argument :
o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
- Notez que vous ne peut pas passer les options par le biais de
util.inspect()
dans ce cas, ce qui implique 2 limitations notables :
- Structurelle profondeur de la sortie est limité à 2 niveaux (par défaut).
- Puisque vous ne pouvez pas changer cela avec
console.log()
vous devez plutôt utiliser console.dir()
: console.dir(myObject, { depth: null }
Imprimés avec illimité profondeur ; voir ci-dessous.
- Vous ne pouvez pas allumer la coloration syntaxique.
-
Si le 1er argument EST une chaîne de format (voir ci-dessous) : utilise
util.format()
pour imprimer les arguments restants en fonction de la chaîne de format (voir ci-dessous) ; par exemple :
o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
- Note :
- Il n'y a pas de placeholder pour représenter objets
util.inspect()
-style.
- JSON généré avec
%j
n'est PAS joliment imprimée.
-
console.dir()
:
-
Accepte uniquement 1 argument pour inspecter et s'applique toujours
util.inspect()
- essentiellement, une enveloppe pour util.inspect()
sans options par défaut ; par exemple :
o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
-
Node.js v0.11.14 et plus : Le 2ème argument facultatif spécifie options pour
util.inspect()
- voir ci-dessous ; par exemple :
console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
-
Le REPL : imprime implicitement la valeur de retour de toute expression avec util.inspect()
avec coloration syntaxique ;
c'est-à-dire qu'il suffit de taper le nom d'une variable et d'appuyer sur Entrée pour imprimer une version inspectée de sa valeur ; par ex :
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
automatiquement les jolis dessins objet y tableau représentations mais produit multiligne sortie uniquement en cas de besoin .
-
Le comportement de l'impression peut être contrôlé par l'option compact
dans l'option options
argument ; false
utilise la sortie multi-ligne sans condition alors que true
désactive complètement la fonction de pretty-printing ; elle peut également être définie comme une valeur de numéro (la valeur par défaut est 3
) pour contrôler le comportement conditionnel multi-lignes - voir les docs .
-
Par défaut, la sortie est enveloppée à environ 60 caractères Merci, Shrey indépendamment du fait que la sortie soit envoyée vers un fichier ou un terminal. En pratique, puisque les coupures de ligne ne se produisent qu'aux limites de la propriété vous obtiendrez souvent des lignes plus courtes, mais elles peuvent aussi être plus longues (par exemple, avec de longues valeurs de propriété).
-
Dans la version 6.3.0+, vous pouvez utiliser la fonction breakLength
pour passer outre la limite de 60 caractères ; si vous la définissez comme suit Infinity
tout est publié sur un simple ligne.
Si vous souhaitez avoir plus de contrôle sur les jolies impressions, envisagez d'utiliser JSON.stringify()
avec un 3ème argument mais notez ce qui suit :
-
Échecs avec des objets qui ont références circulaires comme
module
dans le contexte mondial.
-
Méthodes (fonctions) ne seront PAS incluses.
- Vous ne pouvez pas choisir de montrer les propriétés cachées (non énumérables).
- Exemple d'appel :
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
objet options (2ème argument) :
Une option options peut être passé pour modifier certains aspects de la chaîne formatée ; algunos des propriétés prises en charge sont :
Ver les derniers documents de Node.js pour la liste complète actuelle.
-
showHidden
- si
true
puis les propriétés non énumérables de l'objet [celles qui sont désignées pour ne pas apparaître lorsque l'on utilise for keys in obj
o Object.keys(obj)
] seront également affichés. La valeur par défaut est false
.
-
depth
- indique à inspecter combien de fois il faut reculer lors du formatage de l'objet. Ceci est utile pour inspecter de grands objets compliqués. La valeur par défaut est 2. Pour que la récursion soit illimitée, passez la valeur
null
.
-
colors
- si vrai, alors la sortie sera stylisée avec les codes de couleur ANSI. La valeur par défaut est
false
. Les couleurs sont personnalisables [ - voir lien].
-
customInspect
- si
false
puis personnalisé inspect()
les fonctions définies sur les objets inspectés ne seront pas appelées. La valeur par défaut est true
.
util.format()
caractères de remplacement pour les chaînes de format (1er argument)
Quelques des caractères de remplacement pris en charge sont :
Ver les derniers documents sur Node.js pour la liste complète actuelle.
-
%s
- String.
-
%d
- Nombre (à la fois entier et flottant).
-
%j
- JSON.
-
%%
- un seul signe de pourcentage ('%'). Ceci ne consomme pas d'argument.