Lors du débogage à l'aide de console.log()
, comment puis-je obtenir l'objet complet?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Les sorties:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Mais je veux aussi voir le contenu de la propriété f
.
javascript
node.js
debugging
console.log
Michał Perłakowski
la source
la source
v0.10.33
console.log()
implicitementutil.inspect()
à ses arguments, en supposant que le premier n'est pas une chaîne de format. Si vous êtes satisfaitutil.inspect()
des options par défaut de, tout simplementconsole.log(myObject)
fera l'affaire - pas besoin d'exigerutil
;console.dir()
fait de même, mais n'accepte que `objet à inspecter; à partir d'au moinsv0.11.14
, vous pouvez passer l'objet options pourutil.inspect()
comme 2ème argument; ma réponse a plus de détails.console.log(obj)
toujours [Object] pour les objets profondément imbriqués :( je souhaite vraiment qu'il se comporte comme vous le décrivez.console.log()
est invariablement limité à 2 niveaux (car il utiliseutil.inspect()
la valeur par défaut sans vous permettre de la changer);console.dir()
a la même limite par défaut, mais vous pouvez passer dans un choix objet que le 2ème argument de changer cette situation (qui est passé à travers àutil.inspect()
, noter queconsole.dir()
ne peut jamais imprimer 1 . objet à la fois, cependant imprimer avec une profondeur illimité,console.dir(myObject, { depth: null })
.console.dir(myObject, { depth: null })
est du travail pour moiVous pouvez utiliser
JSON.stringify
et obtenir une belle indentation ainsi qu'une syntaxe peut-être plus facile à retenir.Le troisième argument définit le niveau d'indentation, vous pouvez donc l'ajuster comme vous le souhaitez.
Plus de détails ici si nécessaire:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
la source
console.log(JSON.stringify(myObject, null, 4));
plutôt cool! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Une 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()
:Pourquoi ne pas
util.inspect()
? Parce qu'il est déjà au cœur de la production de diagnostic:console.log()
etconsole.dir()
ainsi que le Node.js REPL utiliserutil.inspect()
implicitement . Il n'est généralement pas nécessaire d'require('util')
appelerutil.inspect()
directement.Détails ci-dessous.
console.log()
(et son alias,console.info()
):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 ]'
util.inspect()
dans ce cas, ce qui implique 2 limitations notables:console.log()
, vous devez utiliser à la placeconsole.dir()
: desconsole.dir(myObject, { depth: null }
impressions avec une profondeur illimitée ; voir ci-dessous.util.format()
pour imprimer les arguments restants basés sur 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"}'
util.inspect()
style.%j
n'est PAS assez imprimé.console.dir()
:util.inspect()
- essentiellement, une enveloppe pourutil.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.
util.inspect()
- voir ci-dessous; par exemple:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
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 quetrue
désactive complètement la jolie impression; il peut également être défini sur un nombre (la valeur par défaut est3
) 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 surInfinity
, 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:module
dans le contexte global.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
true
, alors les propriétés non énumérables de l'objet [celles désignées pour ne pas apparaître lorsque vous utilisezfor keys in obj
ouObject.keys(obj)
] seront également affichées. Par défaut àfalse
.depth
null
.colors
false
. Les couleurs sont personnalisables [… - voir lien].customInspect
false
, lesinspect()
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.la source
console.dir(...)
toute la frappe:show = (v, depth=null)=> console.dir(v,{depth:depth})
puis l'appeler comme çashow(variable)
oushow(variable, depth=1)
.Une autre méthode simple consiste à le convertir en json
la source
utils
:)Essaye ça:
la source
Depuis Node.js 6.4.0, cela peut être résolu avec élégance avec
util.inspect.defaultOptions
:la source
c'est peut
console.dir
- être tout ce dont vous avez besoin.http://nodejs.org/api/console.html#console_console_dir_obj
utilisez l'option util si vous avez besoin de plus de contrôle.
la source
options
objet àutil.inspect
.util.inspect()
.Vous pouvez aussi faire
la source
Une bonne façon d'inspecter les objets consiste à utiliser l' option node --inspect avec Chrome DevTools for Node .
Ouvrez
chrome://inspect/#devices
en chrome et cliquez sur Ouvrir des DevTools dédiés pour NodeDésormais, chaque objet enregistré est disponible dans l'inspecteur, comme JS ordinaire s'exécutant dans Chrome.
Il n'est pas nécessaire de rouvrir l'inspecteur, il se connecte automatiquement au nœud dès que le nœud démarre ou redémarre. Les deux --inspect et Chrome DevTools pour le nœud peuvent ne pas être disponibles dans les anciennes versions de nœud et Chrome.
la source
node.exe --inspect index.js
Ces deux usages peuvent être appliqués:
la source
Je pense que cela pourrait vous être utile.
Comme mentionné dans cette réponse :
la source
Vous pouvez simplement ajouter une
inspect()
méthode à votre objet qui remplacera la représentation de l'objet dans lesconsole.log
messagespar exemple:
ensuite, votre objet sera représenté comme requis dans console.log et shell de noeud
la source
Une astuce simple serait d'utiliser un
debug
module pour ajouterDEBUG_DEPTH=null
comme variable d'environnement lors de l'exécution du scriptEx.
DEBUG = * DEBUG_DEPTH = noeud nul index.js
Dans votre code
la source
Le nœud REPL a une solution intégrée pour remplacer la façon dont les objets sont affichés, voir ici .
la source
Option la plus simple:
la source
myObject
à une profondeur arbitraireJSON.stringify ()
Idéal pour une inspection approfondie des objets de données. Cette approche fonctionne sur les tableaux imbriqués et les objets imbriqués avec des tableaux.
la source