Volcado de objetos JavaScript

89

¿Existe un complemento / aplicación de terceros o alguna forma de realizar el volcado de mapas de objetos en el depurador de scripts para un objeto JavaScript?

Aquí está la situación ... Tengo un método que se llama dos veces, y durante cada tiempo algo es diferente. No estoy seguro de qué es diferente, pero algo lo es. Entonces, si pudiera volcar todas las propiedades de window (o al menos window.document) en un editor de texto, podría comparar el estado entre las dos llamadas con un simple archivo diff. Pensamientos

Jessy Houle
fuente
Posible duplicado de ¿Cómo puedo mostrar un objeto JavaScript?
Jan Hudec

Respuestas:

61

Firebug +console.log(myObjectInstance)

Darin Dimitrov
fuente
4
... y luego mire en la consola de Firebug y no en la consola estándar de Javascript . :-)
towi
3
IE tiene una consola, pero el registro de un objeto regresa [object Object]. No muy útil
Steve Robbins
5
@SteveRobbins, ¿quién usa IE para desarrollar aplicaciones web hoy en día? Personalmente, el único uso que he encontrado hasta ahora para Internet Explorer es descargar un navegador web real una vez que reinstalo mi sistema operativo Windows. Por cierto, esa es la única vez que lanzo este software.
Darin Dimitrov
8
Cualquier desarrollador que admita los principales navegadores. Si el problema solo existe en IE, solo se puede probar en IE, por lo que debe usar el navegador.
Steve Robbins
2
Y si estás usando node.js y una terminal ... ¿No hay firebug ??
Cheruvim
134
console.log("my object: %o", myObj)

De lo contrario, terminará con una representación de cadena que a veces muestra:

[object Object]

o algo así.

Tim
fuente
3
simplemente imprime [objeto Objeto] para Chrome y Firefox. <encogiéndose de hombros>
slashdottir
1
@slashdottir Funciona absolutamente en Chrome y FF. Lo uso en Chrome al menos cada semana y ocasionalmente en FF.
Tim
1
@Tim: tienes razón, funciona. por favor Disculpame. error de usuario
slashdottir
¿Cómo diablos no es esta la respuesta seleccionada? Por suerte para mí, esto fue respondido en mi cumpleaños hace 4 años, cuando no estaba usando js.
Joey Carson
2
En Meteor (lado del servidor) imprime my object: %o. No es muy ú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
fuente
4
Actualice su código cambiando el nombre de la función, como en la llamada recursiva, se llama "dump" mientras define el tiempo es "mydump"
Vikas
7
Copiar y pegar de: binnyva.blogspot.com/2005/10/…
utopianheaven
1
esto mata a Chrome y Firefox con "demasiada recursividad" cuando se usa para examinar un objeto jquery
slashdottir
@slashdottir es fácil de arreglar, comprobandoif (level > 10) return level_padding + '<< too deep >>';
John Henckel
La "demasiada recursividad" ocurre debido a una referencia circular (cuando el parámetro secundario de un objeto hace referencia a su objeto principal). Se puede resolver recordando todos los padres del valor actual y si el valor actual coincide con uno de los padres, deje de investigar más.
Alex Velickiy
42

Si está en Chrome, Firefox o IE10 +, ¿por qué no extender la consola y usar

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

para una solución concisa para varios navegadores.

Chris HG
fuente
Me gusta este. Especialmente para navegadores que no admiten el volcado de objetos.
Aley
Y quizás reemplace ese "else console.log (objeto);" con una llamada a una función transversal personalizada como en stackoverflow.com/a/3011557/2236012 arriba? ...;)
CB
@CB "demasiada recursividad" y un navegador congelado es lo que me da en Firefox y Chrome.
slashdottir
3
JSON.stringify no puede serializar estructuras cíclicas. No funcionará para todos los objetos.
Grzegorz Luczywo
24

Solo usa:

console.dir(object);

obtendrá una bonita representación de objetos en los que se puede hacer clic. Funciona en Chrome y Firefox

mons droide
fuente
1
Chrome y Firefox dan [object Object]
slashdottir
Puede probarlo en la consola (presione F12) con console.dir({bar:"foo"}); ¿Su objeto sobrescribe el método toString?
mons droid
parece estar funcionando en la consola al menos. probablemente usuario mío. gracias
slashdottir
una característica tan dulce
Tomalone
12

Para cromo / cromo

console.log(myObj)

o es equivalente

console.debug(myObj)
kaznovac
fuente
4

El uso console.log(object)arrojará su objeto a la consola de JavaScript, pero eso no siempre es lo que desea. El uso JSON.stringify(object)devolverá la mayoría de las cosas para que se almacenen en una variable, por ejemplo, para enviarlas a una entrada de área de texto y enviar el contenido al servidor.

Sebastián
fuente