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 compactpropriété dans l' optionsargument facultatif ; falseutilise la sortie multi-lignes sans condition , tandis que truedé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' breakLengthoption 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
moduledans 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 objou 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.