Uma compilação das muitas respostas úteis de (pelo menos) Node.js v0.10.33
(estável) / v0.11.14
(instável) presumivelmente através de (pelo menos) v7.7.4
(a versão atual da última atualização desta resposta). Ponta do chapéu para Rory O'Kane por sua ajuda.
tl; dr
Para obter a saída desejada para o exemplo na pergunta, use console.dir()
:
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Por que não util.inspect()
? Porque ele já está no coração da saída de diagnóstico: console.log()
e console.dir()
o REPL do Node.js. usa util.inspect()
implicitamente . Geralmente, não é necessáriorequire('util')
ligar e ligar util.inspect()
diretamente.
Detalhes abaixo.
- O REPL : imprime implicitamente o valor de retorno de qualquer expressão
util.inspect()
com cor de sintaxe ;
ou seja, basta digitar o nome de uma variável e pressionar Enter para imprimir uma versão inspecionada de seu valor; por exemplo:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
imprime automaticamente representações de objetos e matrizes , mas produz saída de várias linhas somente quando necessário .
O comportamento de impressão bonita pode ser controlado pela compact
propriedade no options
argumento opcional ; false
usa saída de várias linhas incondicionalmente , enquanto true
desativa completamente a impressão; também pode ser definido como um número (o padrão é 3
) para controlar o comportamento condicional de várias linhas - consulte os documentos .
Por padrão, a saída é ajustada em cerca de 60 caracteres , obrigado Shrey
, independentemente de a saída ser enviada para um arquivo ou um terminal. Na prática, como as quebras de linha acontecem apenas nos limites das propriedades , muitas vezes você acaba com linhas mais curtas, mas elas também podem ser mais longas (por exemplo, com valores de propriedades longos).
Na v6.3.0 +, você pode usar a breakLength
opção para substituir o limite de 60 caracteres; se você configurá-lo como Infinity
, tudo será emitido em uma única linha.
Se você deseja ter mais controle sobre a impressão bonita, considere usar JSON.stringify()
com um terceiro argumento , mas observe o seguinte:
- Falha com objetos que possuem referências circulares , como
module
no contexto global.
- Métodos (funções) NÃO serão incluídos por design.
- Você não pode optar por mostrar propriedades ocultas (não enumeráveis).
- Chamada de exemplo:
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 opções (segundo argumento):
Um objeto de opções opcionais pode ser passado que altera certos aspectos da sequência formatada; algumas das propriedades suportadas são:
Consulte os documentos mais recentes do Node.js. para obter a lista completa e atual.
showHidden
- se
true
, as propriedades não enumeráveis do objeto [aquelas designadas para não aparecer quando você usa for keys in obj
ou Object.keys(obj)
] também serão mostradas. O padrão é false
.
depth
- informa a inspeção quantas vezes se repetir durante a formatação do objeto. Isso é útil para inspecionar objetos grandes e complicados. O padrão é 2. Para fazê-lo recuar indefinidamente, passe
null
.
colors
- se verdadeiro, a saída será estilizada com códigos de cores ANSI. O padrão é
false
. As cores são personalizáveis [… - veja o link].
customInspect
- se
false
, as inspect()
funções personalizadas definidas nos objetos que estão sendo inspecionados não serão chamadas. O padrão é true
.
util.format()
espaços reservados de string de formato (1º argumento)
Alguns dos espaços reservados suportados são:
Consulte os documentos mais recentes do Node.js. para obter a lista completa e atual.
%s
- Corda.
%d
- Número (inteiro e flutuante).
%j
- JSON.
%%
- sinal de porcentagem único ('%'). Isso não consome um argumento.