Una 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()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
¿Por qué no util.inspect()
? Porque ya está en el corazón de la salida de diagnóstico: console.log()
y console.dir()
también como el uso deutil.inspect()
Node.js REPL implícitamente . Generalmente no es necesariorequire('util')
llamar util.inspect()
directamente.
Detalles abajo.
- REPL : imprime implícitamente el valor de retorno de cualquier expresión
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 el options
argumento opcional ; false
usa la salida multilínea incondicionalmente , mientras que true
desactiva la impresión bonita por completo; también se puede establecer en un número (el valor predeterminado es 3
) 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 configura Infinity
, 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:
- Falla con objetos que tienen referencias circulares , como
module
en el contexto global.
- Los métodos (funciones) por diseño NO serán incluidos.
- No puede optar por mostrar propiedades ocultas (no enumerables).
- Llamada de ejemplo:
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
- si
true
, entonces también se mostrarán las propiedades no enumerables del objeto [aquellas designadas para no aparecer cuando se usa for keys in obj
o Object.keys(obj)
]. Por defecto es false
.
depth
- indica inspeccionar cuántas veces debe repetirse mientras formatea el objeto. Esto es útil para inspeccionar objetos grandes y complicados. El valor predeterminado es 2. Para que se repita indefinidamente, pase
null
.
colors
- si es verdadero, la salida tendrá un estilo con códigos de color ANSI. Por defecto es
false
. Los colores son personalizables [... - ver enlace].
customInspect
- si
false
, entonces no se llamarán las inspect()
funciones personalizadas definidas en los objetos que se están inspeccionando. Por defecto es true
.
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.