Como exibo o conteúdo de um objeto JavaScript em um formato de string como quando temos alert
uma variável?
Da mesma forma que eu quero exibir um objeto.
javascript
serialization
javascript-objects
maxjackie
fonte
fonte
console.log("", yourObject1, yourObject2, yourObject3, etc...);
. Uma versão mais curta é apenas fazerconsole.log(yourObject1, yourObject2, etc...);
.console.log('a string', aNumber, anObject)
Respostas:
Se você deseja imprimir o objeto para fins de depuração, use o código:
Exibirá:
Nota: você deve registrar apenas o objeto. Por exemplo, isso não funcionará:
Nota ' : Você também pode usar uma vírgula no
log
método, a primeira linha da saída será a string e depois o objeto será renderizado:fonte
console.log(obj1, obj2)
funciona muito bem, para que você não precise chamarconsole.log()
todos os objetos ao registrar várias variáveis. Além disso, lembre-se sempre de remover todas as chamadas em produção, pois isso interromperá os navegadores que não a implementam (como o Internet Explorer).console.log("id:"+obj);
não será exibido corretamente, pois gera uma sequência de caracteres como você a vê lá, é necessário especificá-la assim:console.log("id:"); console.log(obj);
console.log(JSON.stringify(obj))
ouconsole.dir(obj)
Use o
JSON.stringify
método nativo . Funciona com objetos aninhados e todos os principais navegadores oferecem suporte a esse método.Link para Mozilla API Reference e outros exemplos.
Use um substituto JSON.stringify personalizado se você encontrar este erro Javascript
fonte
console.log
ou seja,console.log(JSON.stringify(obj,null, 4));
{}
para um objeto não vazio. Portanto, verifique comconsole.log(obj)
antes de pensar que seu objeto está vazio quandostrigify()
retornar{}
.fonte
console.dir(object)
:Observe que o
console.dir()
recurso não é padrão. Consulte Documentos da Web da MDNfonte
console.dir
disso é que você ainda pode expandir e ler os valores em seu console depois que a variável tiver sido coletada como lixo. Isso está descrito em outro artigo da SO aquiconsole.dir
é que, quando você salva o console em um arquivo, todas as propriedades estão no arquivo conforme o esperado. Isso não acontece ao usar apenas o console.log.tente isto:
Isso imprimirá a versão stringify do objeto. Então, em vez de
[object]
como uma saída, você obterá o conteúdo do objeto.fonte
typeerror: Converting circular structure to JSON
?Bem, o Firefox (graças a @Bojangles para informações detalhadas) possui um
Object.toSource()
método que imprime objetos como JSON efunction(){}
.Isso é suficiente para a maioria dos propósitos de depuração, eu acho.
fonte
.toSource()
é realmente apenas o Firefox . Apenas pensei em avisar você.Se você quiser usar o alerta, para imprimir seu objeto, faça o seguinte:
alert("myObject is " + myObject.toSource());
Ele deve imprimir cada propriedade e seu valor correspondente no formato de sequência.
fonte
Se você deseja ver dados em formato tabular, pode usar
A tabela pode ser classificada se você clicar na coluna da tabela.
Você também pode selecionar quais colunas mostrar:
Você pode encontrar mais informações sobre console.table aqui
fonte
No NodeJS, você pode imprimir um objeto usando
util.inspect(obj)
. Certifique-se de indicar a profundidade ou você terá apenas uma impressão superficial do objeto.fonte
Função:
Uso:
Exemplo:
http://jsfiddle.net/WilsonPage/6eqMn/
fonte
Basta usar
Exemplo
Ou
Além disso, observe que as funções javascript são consideradas objetos.
Como uma nota extra:
Na verdade, você pode atribuir uma nova propriedade como essa e acessá-la console.log ou exibi-la em alerta
fonte
Usa isto:
fonte
Como foi dito antes, a melhor e mais simples maneira que encontrei foi
fonte
navigator
.Para imprimir o objeto completo com o Node.js com cores como bônus:
As cores são obviamente opcionais, 'depth: null' imprimirá o objeto completo.
As opções não parecem ser suportadas nos navegadores.
Referências:
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir
https://nodejs.org/api/console.html#console_console_dir_obj_options
fonte
NB: Nestes exemplos, yourObj define o objeto que você deseja examinar.
Primeiro, minha maneira menos preferida e mais utilizada de exibir um objeto:
Esta é a maneira defacto de mostrar o conteúdo de um objeto
produzirá algo como:
Acho que a melhor solução é examinar as chaves de objetos e, em seguida, os valores de objetos, se você realmente quiser ver o que o objeto contém ...
Ele produzirá algo como: (foto acima: as chaves / valores armazenados no objeto)
Há também essa nova opção se você estiver usando o ECMAScript 2016 ou mais recente:
Isso produzirá uma saída elegante: A solução mencionada em uma resposta anterior:
console.log(yourObj)
exibe muitos parâmetros e não é a maneira mais fácil de exibir os dados que você deseja . É por isso que eu recomendo as chaves de log e os valores separadamente.Próximo :
Alguém em um comentário anterior sugeriu este, no entanto, nunca funcionou para mim. Se funcionar para outra pessoa em um navegador diferente ou algo assim, parabéns! Ainda vou colocar o código aqui para referência! Produzirá algo assim para o console:
fonte
console.table(yourObj)
funcionou para mim no Google Chrome versão 77.0.3865.90 (versão oficial) (64 bits). Obrigado por compartilhar!(Isso foi adicionado à minha biblioteca no GitHub )
Reinventando a roda aqui! Nenhuma dessas soluções funcionou para a minha situação. Então, rapidamente identifiquei a resposta de wilsonpage . Este não é para impressão em tela (via console, campo de texto ou o que for). Funciona bem nessas situações e funciona bem como o OP solicitou
alert
. Muitas respostas aqui não tratam do usoalert
conforme o OP solicitado. De qualquer forma, ele é formatado para o transporte de dados. Esta versão parece retornar um resultado muito semelhante aotoSource()
. Ainda não testeiJSON.stringify
, mas presumo que isso seja a mesma coisa. Esta versão é mais como um poly-fil, para que você possa usá-lo em qualquer ambiente. O resultado dessa função é uma declaração de objeto Javascript válida.Eu não duvido que algo assim já esteja no SO em algum lugar, mas foi mais curto do que gastar um tempo procurando respostas anteriores. E já que essa pergunta foi o meu maior sucesso no google, quando comecei a pesquisar sobre isso; Imaginei que colocá-lo aqui pode ajudar os outros.
De qualquer forma, o resultado dessa função será uma representação de string do seu objeto, mesmo que ele tenha objetos e matrizes incorporados, e mesmo que esses objetos ou matrizes tenham ainda mais objetos e matrizes incorporados. (Ouvi dizer que você gosta de beber? Então, apertei seu carro com um refrigerador. E então, apertei seu refrigerador com um refrigerador. Então, seu refrigerador pode beber enquanto você é legal.)
As matrizes são armazenadas com em
[]
vez de{}
e, portanto, não têm pares de chave / valor, apenas valores. Como matrizes regulares. Portanto, eles são criados como matrizes.Além disso, todas as cadeias (incluindo nomes de chaves) são citadas, isso não é necessário, a menos que essas cadeias tenham caracteres especiais (como um espaço ou uma barra). Mas não tive vontade de detectar isso apenas para remover algumas aspas que, de outra forma, ainda funcionariam bem.
Essa cadeia resultante pode então ser usada com
eval
ou apenas despejando-a em uma manipulação de cadeia variável. Assim, recrie seu objeto novamente, a partir de texto.Deixe-me saber se eu estraguei tudo, funciona bem nos meus testes. Além disso, a única maneira de pensar em detectar o tipo
array
era verificar a presença delength
. Como o Javascript realmente armazena matrizes como objetos, não posso realmente verificar o tipoarray
(não existe esse tipo!). Se alguém souber de uma maneira melhor, eu adoraria ouvi-la. Porque, se o seu objeto também tiver uma propriedade nomeadalength
, essa função o tratará por engano como uma matriz.EDIT: Adicionada verificação para objetos com valor nulo. Obrigado Brock Adams
EDIT: Abaixo está a função fixa para poder imprimir objetos infinitamente recursivos. Isso não imprime da mesma forma que a
toSource
partir de FF, porquetoSource
imprime a recursão infinita uma vez, onde, como, essa função a mata imediatamente. Essa função é mais lenta que a acima, então estou adicionando-a aqui em vez de editar a função acima, pois só é necessária se você planeja passar objetos que se vinculam de volta a si mesmos, em algum lugar.Teste:
Resultado:
NOTA: Tentar imprimir
document.body
é um exemplo terrível. Por um lado, o FF apenas imprime uma string de objeto vazia ao usartoSource
. E ao usar a função acima, o FF travaSecurityError: The operation is insecure.
. E o Chrome falharáUncaught RangeError: Maximum call stack size exceeded
. Claramente,document.body
não era para ser convertido em string. Porque é muito grande ou é contra a política de segurança acessar determinadas propriedades. A menos que eu estraguei algo aqui em cima, conte!fonte
ObjToSource(document.body)
, por exemplo.ObjToSource(document.body)
por causa da recursão infinita. Mesmodocument.body.toSource()
no FireFox retorna um objeto vazio.document.body
ainda não é imprimível. Veja a nota.document.body
foi apenas um atalho para apontar alguns grandes problemas. Você já corrigiu o pior deles e eu já votei. (Embora, eu acredito que uma abordagem diferente poderia lidardocument.body
maioria das respostas aqui não faria bem contra ele quer..)Se você deseja imprimir o objeto em todo o seu comprimento, pode usar
Se você deseja imprimir o objeto convertendo-o para a string, então
fonte
JSON.stringify
quando tentar concatenar com um objeto string. Se você usarconsole.log(object)
, deve muito imprimir o conteúdo do objetoAqui está uma maneira de fazer isso:
fonte
Eu precisava de uma maneira de imprimir recursivamente o objeto, fornecido pela resposta do pagewil (Obrigado!). Atualizei-o um pouco para incluir uma maneira de imprimir até um determinado nível e adicionar espaçamento para que seja recuado adequadamente com base no nível atual em que estamos, para que fique mais legível.
Uso:
fonte
Eu sempre uso
console.log("object will be: ", obj, obj1)
. Dessa forma, não preciso fazer a solução alternativa com stringify com JSON. Todas as propriedades do objeto serão bem expandidas.fonte
Outra maneira de exibir objetos no console é com
JSON.stringify
. Confira o exemplo abaixo:fonte
Função Javascript
Objeto de impressão
via print_r em Javascript
fonte
onde
object
está seu objetoou você pode usar isso nas ferramentas de desenvolvimento do chrome, na guia "console":
console.log(object);
fonte
console.log(Object.keys(object));
enquanto eu sei que só imprime as chaves de propriedades, é o suficiente para me para os meus propósitos;)Assumir objeto
obj = {0:'John', 1:'Foo', 2:'Bar'}
Imprimir o conteúdo do objeto
Saída do console (Chrome DevTools):
Espero que ajude!
fonte
Eu prefiro usar
console.table
para obter um formato de objeto claro, então imagine que você tenha esse objeto:E você verá uma tabela limpa e legível como esta abaixo:
fonte
Uma pequena função auxiliar que eu sempre uso nos meus projetos para depuração simples e rápida através do console. Inspiração tirada do Laravel.
Uso
dd(123.55);
saídas:fonte
Você também pode usar o conceito literal de modelo ES6 para exibir o conteúdo de um objeto JavaScript em um formato de sequência.
fonte
usei o método de impressão do pagewil e funcionou muito bem.
aqui está minha versão ligeiramente estendida com recuos (desleixados) e delimitadores prop / ob distintos:
fonte
Outra modificação do código de pagewils ... dele não imprime nada além de strings e deixa em branco o número e os campos booleanos e eu corrigi o erro de digitação no segundo tipo de apenas dentro da função criada pelo megaboss.
fonte
Aqui está a função.
Ele pode mostrar o objeto usando o recuo da guia com legibilidade.
fonte