Al depurar usando console.log()
, ¿cómo puedo obtener el objeto completo?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Salidas:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Pero también quiero ver el contenido de la propiedad f
.
javascript
node.js
debugging
console.log
Michał Perłakowski
fuente
fuente
v0.10.33
console.log()
implícitamenteutil.inspect()
a sus argumentos, suponiendo que el primero no es una cadena de formato. Si está satisfecho conutil.inspect()
las opciones predeterminadas, simplementeconsole.log(myObject)
lo hará, no es necesarioutil
;console.dir()
hace lo mismo, pero acepta solo 'objeto para inspeccionar; por lo menosv0.11.14
, puede pasar el objeto de opcionesutil.inspect()
como el segundo argumento; Mi respuesta tiene más detalles.console.log(obj)
todavía imprimo [Objeto] para objetos profundamente anidados :( Realmente desearía que se comportara como usted describe.console.log()
está invariablemente limitado a 2 niveles (porque usautil.inspect()
el valor predeterminado sin permitirle cambiarlo);console.dir()
tiene el mismo límite de forma predeterminada, pero puede pasar un objeto de opciones como el segundo argumento para cambiar eso (que se pasa autil.inspect()
; tenga en cuenta queconsole.dir()
solo puede imprimir 1 objeto a la vez, sin embargo. Para imprimir con profundidad ilimitada, useconsole.dir(myObject, { depth: null })
.console.dir(myObject, { depth: null })
es trabajo para míPuede usar
JSON.stringify
y obtener una buena sangría, así como quizás una sintaxis más fácil de recordar.El tercer argumento establece el nivel de sangría, por lo que puede ajustarlo como desee.
Más detalles aquí si es necesario:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
fuente
console.log(JSON.stringify(myObject, null, 4));
¡muy genial! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Una compilación de las muchas respuestas útiles de (al menos) Node.js
v0.10.33
(estable) /v0.11.14
(inestable) presumiblemente a través de (al menos)v7.7.4
(la versión actual a partir de la última actualización de esta respuesta). Punta del sombrero a Rory O'Kane por su ayuda.tl; dr
Para obtener el resultado deseado para el ejemplo en la pregunta, use
console.dir()
:¿Por qué no
util.inspect()
? Porque ya está en el corazón de la salida de diagnóstico:console.log()
yconsole.dir()
también como el uso deutil.inspect()
Node.js REPL implícitamente . Generalmente no es necesariorequire('util')
llamarutil.inspect()
directamente.Detalles abajo.
console.log()
(y su aliasconsole.info()
):util.inspect()
se aplica automáticamente a cada argumento:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
util.inspect()
, en este caso, lo que implica limitaciones notables 2:console.log()
, debe usarconsole.dir()
:console.dir(myObject, { depth: null }
impresiones con profundidad ilimitada ; vea abajo.util.format()
para imprimir los argumentos restantes basados en la cadena de formato (ver abajo); p.ej:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
util.inspect()
estilo.%j
NO está bien impreso.console.dir()
:util.inspect()
, esencialmente, un contenedorutil.inspect()
sin opciones por defecto; p.ej:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
util.inspect()
- ver a continuación; p.ej:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
util.inspect()
con un color de sintaxis ;es decir, simplemente escribiendo el nombre de una variable y presionando Enter se imprimirá una versión inspeccionada de su valor; p.ej:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
automáticamente imprime bonitas representaciones de objetos y matrices , pero produce una salida multilínea solo cuando es necesario .El comportamiento de impresión bonita puede ser controlado por la
compact
propiedad en eloptions
argumento opcional ;false
usa la salida multilínea incondicionalmente , mientras quetrue
desactiva la impresión bonita por completo; también se puede establecer en un número (el valor predeterminado es3
) para controlar el comportamiento condicional de varias líneas; consulte los documentos .De forma predeterminada, la salida se ajusta a alrededor de 60 caracteres , gracias, Shrey , independientemente de si la salida se envía a un archivo o terminal. En la práctica, dado que los saltos de línea solo ocurren en los límites de la propiedad , a menudo terminará con líneas más cortas, pero también pueden ser más largas (por ejemplo, con valores de propiedad largos).
En v6.3.0 + puede usar la
breakLength
opción para anular el límite de 60 caracteres; si lo configuraInfinity
, todo se genera en una sola línea.Si desea tener más control sobre la impresión bonita, considere usar
JSON.stringify()
con un tercer argumento , pero tenga en cuenta lo siguiente:module
en el contexto global.JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
objeto de opciones (segundo argumento):Se puede pasar un objeto de opciones opcionales que altere ciertos aspectos de la cadena formateada; Algunas de las propiedades admitidas son:
Consulte los últimos documentos de Node.js para obtener la lista completa actual.
showHidden
true
, entonces también se mostrarán las propiedades no enumerables del objeto [aquellas designadas para no aparecer cuando se usafor keys in obj
oObject.keys(obj)
]. Por defecto esfalse
.depth
null
.colors
false
. Los colores son personalizables [... - ver enlace].customInspect
false
, entonces no se llamarán lasinspect()
funciones personalizadas definidas en los objetos que se están inspeccionando. Por defecto estrue
.util.format()
marcadores de posición de cadena de formato (1er argumento)Algunos de los marcadores de posición admitidos son:
Consulte los últimos documentos de Node.js para obtener la lista completa actual.
%s
- Cuerda.%d
- Número (tanto entero como flotante).%j
- JSON.%%
- signo de porcentaje único ('%'). Esto no consume un argumento.fuente
console.dir(...)
sin todo el tipeo:show = (v, depth=null)=> console.dir(v,{depth:depth})
y luego llamarlo asíshow(variable)
oshow(variable, depth=1)
.Otro método simple es convertirlo a json
fuente
utils
:)Prueba esto:
fuente
Desde Node.js 6.4.0, esto se puede resolver elegantemente con
util.inspect.defaultOptions
:fuente
Quizás
console.dir
es todo lo que necesitas.http://nodejs.org/api/console.html#console_console_dir_obj
use la opción util si necesita más control.
fuente
options
objeto autil.inspect
.util.inspect()
.También puedes hacer
fuente
Una buena forma de inspeccionar objetos es usar la opción nodo - inspeccionar con Chrome DevTools for Node .
Abra
chrome://inspect/#devices
en Chrome y haga clic en Abrir DevTools dedicado para el nodoAhora cada objeto registrado está disponible en el inspector como JS normal que se ejecuta en Chrome.
No es necesario volver a abrir el inspector, se conecta al nodo automáticamente tan pronto como el nodo se inicia o reinicia. Es posible que --inspect y Chrome DevTools for Node no estén disponibles en versiones anteriores de Node y Chrome.
fuente
node.exe --inspect index.js
Ambos usos se pueden aplicar:
fuente
Creo que esto podría ser útil para ti.
Como se menciona en esta respuesta :
fuente
Simplemente puede agregar un
inspect()
método a su objeto que anulará la representación del objeto en losconsole.log
mensajesp.ej:
entonces, su objeto se representará como se requiere en console.log y node shell
fuente
Un truco simple sería usar el
debug
módulo para agregarDEBUG_DEPTH=null
como variable de entorno al ejecutar el scriptEx.
DEBUG = * DEBUG_DEPTH = nodo nulo index.js
En tu codigo
fuente
El nodo REPL tiene una solución integrada para anular cómo se muestran los objetos, ver aquí .
fuente
Opción más fácil:
fuente
myObject
a una profundidad arbitrariaJSON.stringify ()
Excelente para la inspección profunda de objetos de datos. Este enfoque funciona en matrices anidadas y objetos anidados con matrices.
fuente