Como posso exibir um objeto JavaScript?

Como posso mostrar o conteúdo de um objecto JavaScript num formato de texto como quando nós alert uma variável?

A mesma forma formatada que quero mostrar um objecto.

Author: Kamil Kiełczewski, 2009-06-05

30 answers

Se quiser imprimir o objecto para efeitos de depuração, use o código:

var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)

Irá mostrar:

screenshot console chrome

Nota: {[16] } Você deve apenas registar o objecto. Por exemplo, isto não vai funcionar:

console.log('My object : ' + obj)

Nota ' : Você também pode usar uma vírgula no método log, então a primeira linha do resultado será a string e depois disso o objecto será renderizado:

console.log('My object: ', obj);
 1176
Author: Triptych, 2020-02-27 15:05:03

Usar o método nativo JSON.stringify. Funciona com objetos aninhados e todos os navegadores principais suportam este método.

str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()

Ligação a referência da API Mozilla e outros exemplos.

obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)

Use um personalizado JSON.stringify replacer se encontrar este erro de Javascript

"Uncaught TypeError: Converting circular structure to JSON"
 2094
Author: Sandeep, 2018-02-28 23:48:00
var output = '';
for (var property in object) {
  output += property + ': ' + object[property]+'; ';
}
alert(output);
 404
Author: Flavius Stef, 2014-02-19 21:24:59

console.dir(object):

Mostra uma lista interactiva das propriedades de um objecto JavaScript especificado. Esta lista permite-lhe usar triângulos de divulgação para examinar o conteúdo dos objectos-filhos.

Note que a funcionalidade console.dir() não é normal. Ver documentos web MDN

 132
Author: Pizzaiola Gorgonzola, 2018-03-07 03:32:51

Tenta isto:

console.log(JSON.stringify(obj))

Isto irá imprimir a versão de stringify do objecto. Então, em vez de [object] como uma saída, você vai obter o conteúdo do objeto.

 86
Author: Abhishek Goel, 2015-08-12 08:33:48
Bem, o Firefox (graças a @Bojangles para informações detalhadas) tem Object.toSource() método que imprime objectos como JSON e function(){}. Isso é suficiente para a maioria dos fins de depuração, acho eu.
 68
Author: alamar, 2014-07-10 09:18:39

Se quiser usar o alert, para imprimir o seu objecto, pode fazer isto:

alert("myObject is " + myObject.toSource());

Deve imprimir cada propriedade e o seu valor correspondente no formato de texto.

 54
Author: Garry, 2010-09-09 07:15:44

Se quiser ver os dados em formato tabular, pode usar

console.table(obj);

A tabela pode ser ordenada se clicar na coluna da tabela.

Também pode seleccionar as colunas a mostrar:

console.table(obj, ['firstName', 'lastName']);

Você pode encontrar mais informações sobre o console.Quadro Aqui

 40
Author: Vlad Bezden, 2015-03-26 12:43:54

Em NodeJS você pode imprimir um objecto usando util.inspect(obj). Certifique-se de indicar a profundidade ou você só terá uma impressão superficial do objeto.

 36
Author: astone26, 2018-04-10 22:49:53

Função:

var print = function(o){
    var str='';

    for(var p in o){
        if(typeof o[p] == 'string'){
            str+= p + ': ' + o[p]+'; </br>';
        }else{
            str+= p + ': { </br>' + print(o[p]) + '}';
        }
    }

    return str;
}

Utilização:

var myObject = {
    name: 'Wilson Page',
    contact: {
        email: '[email protected]',
        tel: '123456789'
    }  
}

$('body').append( print(myObject) );

Exemplo:

Http://jsfiddle.net/WilsonPage/6eqMn/

 34
Author: wilsonpage, 2011-11-16 14:37:07

Basta utilizar

JSON.stringify(obj)

Exemplo

var args_string = JSON.stringify(obj);
console.log(args_string);

Ou

alert(args_string);

Também, nota em funções javascript são considerados como objetos.

Como nota extra:

Na verdade, pode atribuir uma nova propriedade como esta e aceder à consola.registar ou mostrar em alerta
foo.moo = "stackoverflow";
console.log(foo.moo);
alert(foo.moo);
 31
Author: Raza Rafaideen, 2019-12-06 12:35:29

NB: Nestes exemplos, yourObj define o objeto que você quer examinar.

Em primeiro lugar, a minha forma menos favorita, mas mais utilizada, de mostrar um objecto:

Esta é a maneira defacto de mostrar o conteúdo de um objeto

console.log(yourObj)

Produzirá algo como : enter image description here

Acho que a melhor solução é olhar através das teclas dos objectos, e depois através dos valores dos objectos, se realmente quiser ver qual é o objecto retencao...

console.log(Object.keys(yourObj));
console.log(Object.values(yourObj));

Vai produzir algo como : enter image description here (ilustrado acima: as chaves/valores guardados no objecto)

Existe também esta nova opção se estiver a utilizar o ECMAScript 2016 ou mais recente:

Object.keys(yourObj).forEach(e => console.log(`key=${e}  value=${yourObj[e]}`));

Isto produzirá uma boa produção. : enter image description here A solução mencionada numa resposta anterior: console.log(yourObj) mostra demasiados parâmetros e não é a forma mais amigável de mostrar os dados que deseja. É por isso que eu recomendo chaves de registro e, em seguida, valores separadamente.

A seguir:
console.table(yourObj)
Alguém num comentário anterior sugeriu este, mas nunca funcionou comigo. Se ele realmente funciona para alguém em um navegador diferente ou algo assim, então parabéns! Ainda ponho o código aqui para referência! Irá enviar algo assim para a consola : enter image description here
 21
Author: Max Alexander Hanna, 2019-06-25 14:17:50

Usa isto:

console.log('print object: ' + JSON.stringify(session));
 19
Author: Walter Caraza, 2013-07-15 04:00:00
Como foi dito antes, a melhor e mais simples maneira que encontrei foi ...
var getPrintObject=function(object)
{
    return JSON.stringify(object);
}
 18
Author: yonia, 2014-10-08 13:57:54

Para imprimir o objecto completo com o nó .JS com cores como bónus:

console.dir(object, {depth: null, colors: true})

As cores são naturalmente opcionais, 'depth: null' irá imprimir o objecto 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

 18
Author: jpoppe, 2017-06-14 17:22:12

Se quiser imprimir o objecto de todo o seu comprimento, pode usar

Consola.log (require ('util').inspeccionar (obj, {showHidden: false, depth: null})

Se quiser imprimir o objecto convertendo-o para o texto então

Consola.log (JSON.stringify (obj);

 14
Author: sreepurna, 2017-04-17 08:35:36

(isto foi adicionado à Minha Biblioteca no GitHub.)

Reinventar a roda aqui! Nenhuma destas soluções funcionou para a minha situação. Então, rapidamente alterei a resposta do wilsonpage. Este não é para impressão para tela (via consola, ou campo de texto ou o que quer que). Funciona muito bem nessas situações e funciona muito bem como o OP pediu, para alert. Muitas respostas aqui não usam alert como o OP pediu. Seja como for, é., formatado para o transporte de dados. Esta versão parece retornar um resultado muito semelhante a toSource(). Eu não testei contra JSON.stringify, mas presumo que isto seja a mesma coisa. Esta versão é mais como um poly-fil para que você possa usá-lo em qualquer ambiente. O resultado desta função é uma declaração de objeto Javascript válida. Não duvidaria se algo assim já estivesse ligado, mas era mais curto do que passar algum tempo à procura de respostas passadas. E desde esta a pergunta era o meu principal sucesso no google quando comecei a pesquisar sobre isso; eu pensei que colocá-lo aqui poderia ajudar os outros.

De qualquer forma, o resultado desta função será uma representação de cadeia de caracteres do seu objecto, mesmo que o seu objecto tenha objectos e arrays incorporados, e mesmo que esses objectos ou arrays tenham ainda mais objectos e arrays incorporados. Ouvi dizer que gostas de beber? Então, eu chulei o teu carro com uma geleira. E depois, eu chulei a tua geleira com uma geleira. Então, a tua geleira pode beber, enquanto estás a ser fixe.)

As matrizes são armazenadas com [] em vez de {} e, portanto, não têm pares chave/valor, apenas valores. Como arrays normais. Por isso, eles são criados como arrays fazer.

Além disso, todas as cadeias de caracteres (incluindo os nomes das chaves) são citadas, isto não é necessário a menos que essas cadeias de caracteres tenham caracteres especiais (como um espaço ou uma barra). Mas, não me apeteceu detectar isto só para remover algumas citações que de outra forma ainda funcionariam bem.

Este texto resultante pode então ser usado com eval ou simplesmente despejá-lo numa manipulação de cordas var Tru. Assim, recriando seu objeto novamente, a partir do texto.

function ObjToSource(o){
    if (!o) return 'null';
    var k="",na=typeof(o.length)=="undefined"?1:0,str="";
    for(var p in o){
        if (na) k = "'"+p+ "':";
        if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
        else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
        else str += k + o[p] + ",";
    }
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}
Avisa-me se estraguei tudo, funciona bem nos meus testes. Além disso, a única maneira que eu poderia pensar para detectar o tipo array era verificar a presença de length. Como Javascript realmente armazena arrays como objetos, Eu não posso realmente verificar para o tipo array (não existe tal tipo!). Se mais alguém souber uma maneira melhor, adoraria ouvi-la. Porque, se object also has a property named length then this function will mistakenly treat it as an array.

Editar: verificação adicionada para os objectos de valor nulo. Obrigado Brock Adams.

Editar: abaixo está a função fixa para ser capaz de imprimir objetos infinitamente recursivos. Isto não imprime o mesmo que toSource de FF porque toSource irá imprimir a recursão infinita uma vez, onde como, esta função irá matá-la imediatamente. Esta função é mais lenta do que a anterior, por isso vou adicioná-la aqui. em vez de editar a função acima, como sua única necessidade Se você planeja passar objetos que ligam de volta para si mesmos, em algum lugar.

const ObjToSource=(o)=> {
    if (!o) return null;
    let str="",na=0,k,p;
    if (typeof(o) == "object") {
        if (!ObjToSource.check) ObjToSource.check = new Array();
        for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
        ObjToSource.check.push(o);
    }
    k="",na=typeof(o.length)=="undefined"?1:0;
    for(p in o){
        if (na) k = "'"+p+"':";
        if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
        else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
        else str += k+o[p]+",";
    }
    if (typeof(o) == "object") ObjToSource.check.pop();
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

Teste:

var test1 = new Object();
test1.foo = 1;
test1.bar = 2;

var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;

console.log(ObjToSource(testobject));
console.log(testobject.toSource());
Resultado:
{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})
Nota: tentar imprimir document.body é um exemplo terrível. Para um, o FF imprime apenas um texto de objecto vazio ao usar o toSource. E ao usar a função acima, FF quebra em SecurityError: The operation is insecure.. E o cromado vai cair. Claramente, document.body não estava destinado a ser convertido em cadeia. Porque é demasiado grande., ou contra a Política de segurança para aceder a certas propriedades. A não ser que tenha estragado alguma coisa, Conta-me!
 14
Author: Pimp Trizkit, 2020-02-17 19:53:25
Eis uma forma de o fazer:
console.log("%o", obj);
 12
Author: Anton Harniakou, 2018-05-31 12:26:26

Eu precisava de uma maneira de imprimir recursivamente o objeto, que a resposta de pagewil forneceu (obrigado!). Eu atualizei um pouco para incluir uma maneira de imprimir até um certo nível, e para adicionar espaçamento para que ele seja devidamente indentado com base no nível atual em que estamos, de modo que fica mais legível.

// Recursive print of object
var print = function( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '<pre>';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += '    ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '...</br>';
        return str;
    }

    for ( var p in o ) {
        if ( typeof o[p] == 'string' ) {
            str += levelStr +
                p + ': ' + o[p] + ' </br>';
        } else {
            str += levelStr +
                p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 ) {
        str += '</pre>';
    }
    return str;
};

Utilização:

var pagewilsObject = {
    name: 'Wilson Page',
    contact: {
        email: '[email protected]',
        tel: '123456789'
    }  
}

// Recursive of whole object
$('body').append( print(pagewilsObject) ); 

// Recursive of myObject up to 1 level, will only show name 
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) ); 
 11
Author: megaboss98, 2012-11-07 23:36:14

Você também pode usar o conceito literal de modelo ES6 para mostrar o conteúdo de um objeto JavaScript em um formato de texto.

alert(`${JSON.stringify(obj)}`);

const obj  = {
  "name" : "John Doe",
  "habbits": "Nothing",
};
alert(`${JSON.stringify(obj)}`);
 8
Author: Ritu, 2020-05-12 11:17:15

Uso sempre console.log("object will be: ", obj, obj1). assim não preciso de trabalhar com o stringify com o JSON. Todas as propriedades do objeto serão expandidas bem.

 6
Author: nils petersohn, 2015-10-20 09:43:44

Outra forma de mostrar os objectos dentro da consola é com JSON.stringify. Confira o exemplo abaixo:

var gandalf = {
  "real name": "Gandalf",
  "age (est)": 11000,
  "race": "Maia",
  "haveRetirementPlan": true,
  "aliases": [
    "Greyhame",
    "Stormcrow",
    "Mithrandir",
    "Gandalf the Grey",
    "Gandalf the White"
  ]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));
 6
Author: Kean Amaral, 2018-07-26 13:51:14

Função Javascript

<script type="text/javascript">
    function print_r(theObj){ 
       if(theObj.constructor == Array || theObj.constructor == Object){ 
          document.write("<ul>") 
          for(var p in theObj){ 
             if(theObj[p].constructor == Array || theObj[p].constructor == Object){ 
                document.write("<li>["+p+"] => "+typeof(theObj)+"</li>"); 
                document.write("<ul>") 
                print_r(theObj[p]); 
                document.write("</ul>") 
             } else { 
                document.write("<li>["+p+"] => "+theObj[p]+"</li>"); 
             } 
          } 
          document.write("</ul>") 
       } 
    } 
</script>

Objecto De Impressão

<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script> 

Via print_r em Javascript

 5
Author: Mukesh Chapagain, 2015-01-21 13:45:29
var list = function(object) {
   for(var key in object) {
     console.log(key);
   }
}

Onde object está o teu objecto

Ou pode usar isto nas Ferramentas do dev do chrome, página "consola":

console.log(object);

 5
Author: user3632930, 2015-03-09 15:45:04

Assume o objecto obj = {0:'John', 1:'Foo', 2:'Bar'}

Imprimir o conteúdo do objecto

for (var i in obj){
    console.log(obj[i], i);
}

Saída da consola (DevTools Chrome):

John 0
Foo 1
Bar 2
Espero que isso ajude!
 5
Author: karlgzafiris, 2016-08-02 16:15:09

Prefiro usar console.table para obter um formato de objecto claro, por isso imagine que tem este objecto:

const obj = {name: 'Alireza', family: 'Dezfoolian', gender: 'male', netWorth: "$0"};

E você vai ver uma tabela limpa e legível como esta abaixo: console.table

 4
Author: Alireza, 2019-01-28 05:32:19

Uma pequena função auxiliar que uso sempre nos meus projectos para depuração rápida e simples através da consola. Inspiração tirada de Laravel.

/**
 * @param variable mixed  The var to log to the console
 * @param varName string  Optional, will appear as a label before the var
 */
function dd(variable, varName) {
    var varNameOutput;

    varName = varName || '';
    varNameOutput = varName ? varName + ':' : '';

    console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}

Utilização

dd(123.55); resultados:
enter image description here

var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj'); 

enter image description here

 3
Author: George Kagan, 2016-11-08 12:53:30

Se estás à procura de uma linha interna para o nó.js...

console.log("%o", object);
 3
Author: Rafael Xavier, 2020-10-27 15:04:53
Usei o método de impressão do pagewil e funcionou muito bem.

Aqui está a minha versão ligeiramente alargada com travessões (desleixados) e delimitadores prop/ob distintos:

var print = function(obj, delp, delo, ind){
    delp = delp!=null ? delp : "\t"; // property delimeter
    delo = delo!=null ? delo : "\n"; // object delimeter
    ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
    var str='';

    for(var prop in obj){
        if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
          var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
          str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
        }else{
          str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
        }
    }
    return str;
};
 2
Author: bitless, 2013-03-27 19:52:06

Outra modificação do código de pagewils... ele não imprime nada além de cordas e deixa o número e campos booleanos em branco e eu corrigi o erro no segundo tipo apenas dentro da função criada por megaboss.

var print = function( o, maxLevel, level )
{
    if ( typeof level == "undefined" )
    {
        level = 0;
    }
    if ( typeof maxlevel == "undefined" )
    {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 )
    {
        str = '<pre>';   // can also be <pre>
    }

    var levelStr = '<br>';
    for ( var x = 0; x < level; x++ )
    {
        levelStr += '    ';   // all those spaces only work with <pre>
    }

    if ( maxLevel != 0 && level >= maxLevel )
    {
        str += levelStr + '...<br>';
        return str;
    }

    for ( var p in o )
    {
        switch(typeof o[p])
        {
          case 'string':
          case 'number':    // .tostring() gets automatically applied
          case 'boolean':   // ditto
            str += levelStr + p + ': ' + o[p] + ' <br>';
            break;

          case 'object':    // this is where we become recursive
          default:
            str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
            break;
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 )
    {
        str += '</pre>';   // also can be </pre>
    }
    return str;
};
 2
Author: ppetree, 2016-07-26 12:24:27