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 compactpropriedade no optionsargumento opcional ; falseusa saída de várias linhas incondicionalmente , enquanto truedesativa 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 breakLengthopçã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
moduleno 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 objou 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.