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.33console.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.stringifyy 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.%jNO 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
compactpropiedad en eloptionsargumento opcional ;falseusa la salida multilínea incondicionalmente , mientras quetruedesactiva 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
breakLengthopció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:moduleen el contexto global.JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spacesutil.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.
showHiddentrue, entonces también se mostrarán las propiedades no enumerables del objeto [aquellas designadas para no aparecer cuando se usafor keys in objoObject.keys(obj)]. Por defecto esfalse.depthnull.colorsfalse. Los colores son personalizables [... - ver enlace].customInspectfalse, 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.dires 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
optionsobjeto 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/#devicesen 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.jsAmbos 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.logmensajesp.ej:
entonces, su objeto se representará como se requiere en console.log y node shell
fuente
Un truco simple sería usar el
debugmódulo para agregarDEBUG_DEPTH=nullcomo 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
myObjecta 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