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 compactpropiedad en el optionsargumento opcional ; falseusa la salida multilínea incondicionalmente , mientras que truedesactiva 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 breakLengthopció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
moduleen 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 objo 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.