Ao depurar usando console.log()
, como posso obter o objeto completo?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Saídas:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Mas também quero ver o conteúdo da propriedade f
.
javascript
node.js
debugging
console.log
Michał Perłakowski
fonte
fonte
v0.10.33
console.log()
implicitamenteutil.inspect()
a seus argumentos, assumindo que o primeiro não seja uma sequência de caracteres de formato. Se você está satisfeito comutil.inspect()
as opções padrão, simplesmente oconsole.log(myObject)
fará - não é necessárioutil
;console.dir()
faz o mesmo, mas aceita apenas `objeto para inspecionar; pelo menosv0.11.14
, você pode passar o objeto de opçõesutil.inspect()
como o segundo argumento; minha resposta tem mais detalhes.console.log(obj)
ele ainda impressões [Object] para objetos profundamente aninhados :( Eu realmente gostaria que ele iria se comportar como você descreve.console.log()
é invariavelmente limitado a 2 níveis (porque usautil.inspect()
o padrão sem permitir a alteração);console.dir()
tem o mesmo limite por padrão, mas você pode passar um objeto de opções como o segundo argumento para alterar esse (que é passado parautil.inspect()
; observe que , no entanto,console.dir()
só pode imprimir 1 objeto por vez. No entanto, para imprimir com profundidade ilimitada, useconsole.dir(myObject, { depth: null })
.console.dir(myObject, { depth: null })
é trabalho para mimVocê pode usar
JSON.stringify
e obter um bom recuo, bem como, talvez, mais fácil de lembrar a sintaxe.O terceiro argumento define o nível de indentação, para que você possa ajustá-lo conforme desejado.
Mais detalhes aqui, se necessário:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
fonte
console.log(JSON.stringify(myObject, null, 4));
muito legal! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Uma 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()
:Por que não
util.inspect()
? Porque ele já está no coração da saída de diagnóstico:console.log()
econsole.dir()
o REPL do Node.js. usautil.inspect()
implicitamente . Geralmente, não é necessáriorequire('util')
ligar e ligarutil.inspect()
diretamente.Detalhes abaixo.
console.log()
(e seu apelidoconsole.info()
):util.inspect()
será aplicada automaticamente a todos os argumentos:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
util.inspect()
, neste caso, o que implica 2 limitações notáveis:console.log()
, deve usarconsole.dir()
:console.dir(myObject, { depth: null }
imprime com profundidade ilimitada ; ver abaixo.util.format()
para imprimir os argumentos restantes com base na string de formato (veja abaixo); por exemplo:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
util.inspect()
estilo.%j
NÃO é muito impresso.console.dir()
:util.inspect()
- essencialmente, um wrapper parautil.inspect()
sem opções por padrão; por exemplo:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
util.inspect()
- veja abaixo; por exemplo:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
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 nooptions
argumento opcional ;false
usa saída de várias linhas incondicionalmente , enquantotrue
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 comoInfinity
, 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:module
no contexto global.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
true
, as propriedades não enumeráveis do objeto [aquelas designadas para não aparecer quando você usafor keys in obj
ouObject.keys(obj)
] também serão mostradas. O padrão éfalse
.depth
null
.colors
false
. As cores são personalizáveis [… - veja o link].customInspect
false
, asinspect()
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.fonte
console.dir(...)
sem toda a digitação:show = (v, depth=null)=> console.dir(v,{depth:depth})
e depois chamá-la dessa formashow(variable)
oushow(variable, depth=1)
.Outro método simples é convertê-lo para json
fonte
utils
:)Tente o seguinte:
fonte
Desde o Node.js. 6.4.0, isso pode ser resolvido com elegância com
util.inspect.defaultOptions
:fonte
talvez
console.dir
seja tudo que você precisa.http://nodejs.org/api/console.html#console_console_dir_obj
use a opção util se precisar de mais controle.
fonte
options
objeto parautil.inspect
.util.inspect()
.Você também pode fazer
fonte
Uma boa maneira de inspecionar objetos é usar a opção node --inspect com o Chrome DevTools for Node .
Abra
chrome://inspect/#devices
no chrome e clique em Abrir DevTools dedicado para NodeAgora, todos os objetos registrados estão disponíveis no inspetor, como o JS normal, executando no chrome.
Não há necessidade de reabrir o inspetor, ele se conecta ao nó automaticamente assim que o nó é iniciado ou reiniciado. O --inspect e o DevTools do Chrome para Node podem não estar disponíveis em versões mais antigas do Node e do Chrome.
fonte
node.exe --inspect index.js
Ambos os usos podem ser aplicados:
fonte
Eu acho que isso poderia ser útil para você.
Como mencionado nesta resposta :
fonte
Você pode simplesmente adicionar um
inspect()
método ao seu objeto que substituirá a representação do objeto nasconsole.log
mensagenspor exemplo:
então, seu objeto será representado conforme necessário no console.log e no shell do nó
fonte
Um truque simples seria usar o
debug
módulo para adicionarDEBUG_DEPTH=null
como variável de ambiente ao executar o scriptEx.
DEBUG = * DEBUG_DEPTH = nó nulo index.js
No seu código
fonte
O nó REPL possui uma solução integrada para substituir como os objetos são exibidos, veja aqui .
fonte
Opção mais fácil:
fonte
myObject
a uma profundidade arbitráriaJSON.stringify ()
Ótimo para inspeção profunda de objetos de dados. Essa abordagem funciona em matrizes aninhadas e objetos aninhados com matrizes.
fonte