Object Dump JavaScript

89

Existe um complemento / aplicativo de terceiros ou alguma maneira de executar o despejo do mapa de objetos no depurador de script para um objeto JavaScript?

Aqui está a situação ... Eu tenho um método sendo chamado duas vezes, e a cada vez algo está diferente. Não tenho certeza do que é diferente, mas algo está. Portanto, se eu pudesse despejar todas as propriedades de window (ou pelo menos window.document) em um editor de texto, eu poderia comparar o estado entre as duas chamadas com um arquivo diff simples. Pensamentos?

Jessy Houle
fonte
Possível duplicata de Como posso exibir um objeto JavaScript?
Jan Hudec

Respostas:

61

Firebug +console.log(myObjectInstance)

Darin Dimitrov
fonte
4
... e olhe para o console Firebug e não o console Javascript padrão . :-)
towi
3
O IE tem um console, mas o registro de um objeto retorna [object Object]. Não é muito útil
Steve Robbins
5
@SteveRobbins, quem usa o Internet Explorer para desenvolver aplicações web atualmente? Pessoalmente, o único uso que encontrei até agora para o Internet Explorer é fazer o download de um navegador da Web real depois de reinstalar meu sistema operacional Windows. A propósito, essa é a única vez que lanço este software.
Darin Dimitrov
8
Qualquer desenvolvedor que ofereça suporte aos principais navegadores. Se o problema só existe no IE, ele só pode ser testado no IE, então você deve usar o navegador.
Steve Robbins
2
E se você estiver usando node.js e um terminal .. Não há firebug ??
Cheruvim
134
console.log("my object: %o", myObj)

Caso contrário, você acabará com uma representação de string que às vezes exibe:

[object Object]

ou algo assim.

Tim
fonte
3
apenas imprime [Object Object] para Chrome e Firefox. <shrug>
slashdottir
1
@slashdottir Funciona absolutamente no Chrome e FF. Eu o uso no Chrome pelo menos todas as semanas e ocasionalmente no FF.
Tim
1
@Tim: você está certo, funciona. por favor, dê-me licença. usuário err
slashdottir
Como diabos esta não é a resposta selecionada? Sorte minha que essa pergunta foi respondida no meu aniversário, 4 anos atrás, quando eu não estava usando o js.
Joey Carson,
2
No Meteor (lado do servidor) ele imprime my object: %o. Não é muito útil :)
Erdal G.
45
function mydump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;

    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') {  
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { 
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += mydump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { 
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}
Zhongshu
fonte
4
Atualize seu código com a alteração do nome da função, como na chamada de recursão, ela é chamada de "dump" enquanto define a hora de seu "mydump"
Vikas
7
Copiar e colar de: binnyva.blogspot.com/2005/10/…
utopianheaven
1
isso mata o Chrome e o Firefox com "demasiada recursão" quando usado para examinar um objeto jquery
slashdottir
@slashdottir é fácil de consertar, verificandoif (level > 10) return level_padding + '<< too deep >>';
John Henckel
O "excesso de recursão" ocorre devido à referência circular (quando o parâmetro filho de um objeto faz referência ao seu objeto pai). Pode ser resolvido lembrando todos os pais do valor atual e se o valor atual corresponder a um dos pais, pare de pesquisar mais.
Alex Velickiy
42

Se você estiver no Chrome, Firefox ou IE10 +, por que não estender o console e usar

(function() {
    console.dump = function(object) {
        if (window.JSON && window.JSON.stringify)
            console.log(JSON.stringify(object));
        else
            console.log(object);
    };
})();

para uma solução concisa para vários navegadores.

Chris HG
fonte
Eu gosto deste. Especialmente para navegadores que não suportam dumping de objetos.
Aley de
E talvez substitua aquele "else console.log (object);" com uma chamada para uma função de passagem personalizada como em stackoverflow.com/a/3011557/2236012 acima? ...;)
CB
@CB "recursão demais" e um navegador travado é o que isso me leva no Firefox e no Chrome.
slashdottir
3
JSON.stringify não pode serializar estruturas cíclicas. Não funcionará para todos os objetos.
Grzegorz Luczywo
24

Apenas use:

console.dir(object);

você obterá uma representação de objeto clicável agradável. Funciona no Chrome e Firefox

Mons droid
fonte
1
Chrome e Firefox fornecem [object Object]
slashdottir
Você pode testá-lo no console (Hit F12) com console.dir({bar:"foo"}); Seu objeto sobrescreve o método toString?
mons droid de
parece estar funcionando no console, pelo menos. provavelmente userr por mim. obrigado
slashdottir
um recurso tão doce
tomalone
12

Para Chrome / Chromium

console.log(myObj)

ou é equivalente

console.debug(myObj)
Kaznovac
fonte
4

Usar console.log(object)irá lançar seu objeto para o console Javascript, mas nem sempre é isso que você deseja. Usar JSON.stringify(object)retornará a maioria das coisas a serem armazenadas em uma variável, por exemplo, para enviá-las para uma entrada de textarea e enviar o conteúdo de volta ao servidor.

Sebastian
fonte