Oggetto Dump JavaScript


89

Esiste un componente aggiuntivo / applicazione di terze parti o un modo per eseguire il dumping della mappa degli oggetti nel debugger di script per un oggetto JavaScript?

Ecco la situazione ... Ho un metodo che viene chiamato due volte e ogni volta qualcosa è diverso. Non sono sicuro di cosa sia diverso, ma qualcosa lo è. Quindi, se potessi scaricare tutte le proprietà di window (o almeno window.document) in un editor di testo, potrei confrontare lo stato tra le due chiamate con un semplice file diff. Pensieri?


Risposte:


61

Firebug +console.log(myObjectInstance)


4
... e poi guarda nella console Firebug e non nella console Javascript standard . :-)
Towi

3
IE ha una console, ma la registrazione di un oggetto restituisce [object Object]. Non molto utile
Steve Robbins il

5
@SteveRobbins, chi usa IE per sviluppare applicazioni web al giorno d'oggi? Personalmente l'unico utilizzo che ho trovato finora per Internet Explorer è scaricare un vero browser web una volta reinstallato il mio sistema operativo Windows. A proposito, è l'unica volta in cui lancio questa pace di software.
Darin Dimitrov

8
Qualsiasi sviluppatore che supporti i principali browser. Se il problema esiste solo in IE, può essere testato solo in IE, quindi devi usare il browser.
Steve Robbins

2
E se stai usando node.js e un terminale .. Non c'è firebug ??
Cheruvim

134
console.log("my object: %o", myObj)

Altrimenti ti ritroverai con una rappresentazione di stringa che a volte mostra:

[object Object]

o qualcosa del genere.


3
stampa solo [Object Object] per Chrome e Firefox. <shrug>
slashdottir

1
@slashdottir Funziona assolutamente in Chrome e FF. Lo uso in Chrome almeno una volta alla settimana e occasionalmente in FF.
Tim

1
@ Tim: hai ragione, funziona. per favore scusami. utente err
slashdottir

Come diavolo non è questa la risposta scelta? Fortunatamente per me che questa è stata risposta il giorno del mio compleanno 4 anni fa, quando non stavo usando js.
Joey Carson

2
In Meteor (lato server) stampa my object: %o. Non molto utile :)
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;
}

4
Aggiorna il tuo codice cambiando il nome della funzione, come nella chiamata ricorsiva, si chiama "dump" mentre definisce l'ora è "mydump"
Vikas


1
questo uccide Chrome e Firefox con "troppa ricorsione" quando viene utilizzato per esaminare un oggetto jquery
slashdottir

@slashdottir è facile da risolvere, controllandoif (level > 10) return level_padding + '<< too deep >>';
John Henckel

La "troppa ricorsione" si verifica a causa del riferimento circolare (quando il parametro figlio di un oggetto fa riferimento al suo oggetto genitore). Può essere risolto ricordando tutti i genitori del valore corrente e se il valore corrente corrisponde a uno dei genitori, smetti di scavare ulteriormente.
Alex Velickiy

42

Se sei su Chrome, Firefox o IE10 +, perché non estendere la console e utilizzarlo

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

per una soluzione concisa e cross-browser.


Mi piace questa. Soprattutto per i browser che non supportano il dumping degli oggetti.
Aley

E magari sostituire "else console.log (object);" con una chiamata a una funzione di attraversamento personalizzata come in stackoverflow.com/a/3011557/2236012 sopra? ...;)
CB

@CB "troppa ricorsione" e un browser bloccato è ciò che questo mi offre in Firefox e Chrome.
slashdottir

3
JSON.stringify non può serializzare le strutture cicliche. Non funzionerà per tutti gli oggetti.
Grzegorz Luczywo,

24

Usa solo:

console.dir(object);

otterrai una bella rappresentazione dell'oggetto cliccabile. Funziona con Chrome e Firefox


1
Chrome e Firefox danno [Object Object]
slashdottir

Puoi testarlo nella console (premi F12) con console.dir({bar:"foo"}); Il tuo oggetto sovrascrive il metodo toString?
mons Droid

sembra funzionare almeno nella console. probabilmente userr da me. grazie
slashdottir

una caratteristica così dolce
tomalone

12

Per Chrome / Chromium

console.log(myObj)

o è equivalente

console.debug(myObj)


4

L'utilizzo console.log(object)lancerà il tuo oggetto nella console Javascript, ma non è sempre quello che vuoi. L'uso JSON.stringify(object)restituirà la maggior parte delle cose da memorizzare in una variabile, ad esempio per inviarla a un input di textarea e inviare il contenuto al server.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.