Une compilation des nombreuses réponses utiles de (au moins) Node.js v0.10.33
(stable) / v0.11.14
(instable) vraisemblablement via (au moins) v7.7.4
(la version actuelle à la dernière mise à jour de cette réponse). Pointe du 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 ne pas util.inspect()
? Parce qu'il est déjà au cœur de la production de diagnostic: console.log()
et console.dir()
ainsi que le Node.js REPL utiliser util.inspect()
implicitement . Il n'est généralement pas nécessaire d'require('util')
appeler util.inspect()
directement.
Détails ci-dessous.
- Le REPL : imprime implicitement la valeur de retour de toute expression
util.inspect()
avec une coloration syntaxique ;
c'est-à-dire, le simple fait de taper le nom d'une variable et d'appuyer sur Entrée affichera une version inspectée de sa valeur; par exemple:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
imprime automatiquement les représentations d' objets et de tableaux , mais ne produit une sortie multiligne qu'en cas de besoin .
Le comportement de jolie impression peut être contrôlé par la compact
propriété dans l' options
argument facultatif ; false
utilise la sortie multi-lignes sans condition , tandis que true
désactive complètement la jolie impression; il peut également être défini sur un nombre (la valeur par défaut est 3
) pour contrôler le comportement multiligne conditionnel - voir la documentation .
Par défaut, la sortie est emballée à environ 60 caractères merci, Shrey
, que la sortie soit envoyée vers un fichier ou un terminal. En pratique, étant donné que les sauts de ligne ne se produisent qu'aux limites des propriétés , vous vous retrouverez souvent avec des lignes plus courtes, mais elles peuvent également être plus longues (par exemple, avec de longues valeurs de propriété).
Dans v6.3.0 +, vous pouvez utiliser l' breakLength
option pour remplacer la limite de 60 caractères; si vous le définissez sur Infinity
, tout est sorti sur une seule ligne.
Si vous voulez plus de contrôle sur la jolie impression, pensez à utiliser JSON.stringify()
avec un troisième argument , mais notez ce qui suit:
- Échoue avec les objets qui ont des références circulaires , comme
module
dans le contexte global.
- Les méthodes (fonctions) ne seront PAS incluses par conception.
- Vous ne pouvez pas choisir d'afficher 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 (2e argument):
Un objet d' options facultatif peut être transmis qui modifie certains aspects de la chaîne formatée; certaines des propriétés prises en charge sont:
Consultez les derniers documents Node.js pour la liste complète actuelle.
showHidden
- si
true
, alors les propriétés non énumérables de l'objet [celles désignées pour ne pas apparaître lorsque vous utilisez for keys in obj
ou Object.keys(obj)
] seront également affichées. Par défaut à false
.
depth
- indique à inspecter combien de fois il doit récursivement tout en formatant l'objet. Ceci est utile pour inspecter de gros objets compliqués. Par défaut à 2. Pour le faire rentrer indéfiniment, passez
null
.
colors
- si true, la sortie sera stylisée avec des codes de couleur ANSI. Par défaut à
false
. Les couleurs sont personnalisables [… - voir lien].
customInspect
- si
false
, les inspect()
fonctions personnalisées définies sur les objets inspectés ne seront pas appelées. Par défaut à true
.
util.format()
espaces réservés format-string (1er argument)
Certains des espaces réservés pris en charge sont les suivants:
Consultez les derniers documents Node.js pour la liste complète actuelle.
%s
- Chaîne.
%d
- Nombre (entier et flottant).
%j
- JSON.
%%
- signe de pourcentage unique ('%'). Cela ne consomme pas un argument.