En Chrome, el consoleobjeto define dos métodos que parecen hacer lo mismo:
console.log(...)
console.dir(...)Leí en algún lugar en línea que dirtoma una copia del objeto antes de registrarlo, mientras que logsolo pasa la referencia a la consola, lo que significa que para cuando inspeccione el objeto que registró, puede haber cambiado. Sin embargo, algunas pruebas preliminares sugieren que no hay diferencia y que ambos sufren la posibilidad de mostrar objetos en diferentes estados que cuando se registraron.
Prueba esto en la consola de Chrome ( Ctrl+ Shift+ J) para ver a qué me refiero:
> o = { foo: 1 }
> console.log(o)
> o.foo = 2Ahora, expanda [Object]debajo de la declaración de registro y observe que se muestra foocon un valor de 2. Lo mismo es cierto si repite el experimento usando en dirlugar de log.
Mi pregunta es, ¿por qué existen estas dos funciones aparentemente idénticas console?
fuente

console.log([1,2])yconsole.dir([1,2])verás la diferencia.console.dirno cambia, por lo que hace una gran diferencia.console.dir(): ¡esta característica no es estándar ! Así que no lo use en producción;)Respuestas:
En Firefox, estas funciones se comportan de manera bastante diferente:
logsolo imprime unatoStringrepresentación, mientras quedirimprime un árbol navegable.En Chrome,
logya imprime un árbol, la mayoría de las veces . Sin embargo, Chromelogaún encadena ciertas clases de objetos, incluso si tienen propiedades. Quizás el ejemplo más claro de una diferencia es una expresión regular:También puede ver una clara diferencia con las matrices (por ejemplo,
console.dir([1,2,3])) que estánlogged de manera diferente a los objetos normales:Los objetos DOM también exhiben un comportamiento diferente, como se señaló en otra respuesta .
fuente
console.logparece ser la versión simplificada de "Firefox" que se parecetoStringmás a un árbol que a un árbol. Todavía no estoy seguro de cuándo lo cambiaron, pero lo hicieron.console.logo si la abre más tarde. Sí, en serio. :-)console.log, pero conconsole.dir, se puede ver lasprototype,argumentspropiedades.console.logy enconsole.dirrealidad devuelve la misma representación[1,2,3]en Firefox.Existe otra diferencia útil en Chrome cuando se envían elementos DOM a la consola.
Aviso:
console.logimprime el elemento en un árbol similar a HTMLconsole.dirimprime el elemento en un árbol similar a JSONEspecíficamente,
console.logda un tratamiento especial a los elementos DOM, mientrasconsole.dirque no. Esto suele ser útil cuando se trata de ver la representación completa del objeto DOM JS.Hay más información en la referencia de la API de Chrome Console sobre esta y otras funciones.
fuente
Creo que Firebug lo hace de manera diferente a las herramientas de desarrollo de Chrome. Parece que Firebug te da una versión en cadena del objeto mientras
console.dirte da un objeto expandible. Ambos le dan el objeto expandible en Chrome, y creo que de ahí podría surgir la confusión. O es solo un error en Chrome.En Chrome, ambos hacen lo mismo. Al ampliar su prueba, noté que Chrome obtiene el valor actual del objeto cuando lo expande.
Puede usar lo siguiente para obtener una versión en cadena de un objeto si eso es lo que desea ver. Esto le mostrará cuál es el objeto en el momento en que se llama esta línea, no cuando la expande.
fuente
Use console.dir () para generar un objeto explorable en el que puede hacer clic en lugar de la versión .toString (), de esta manera:
¿Cómo mostrar el objeto completo en la consola de Chrome?
fuente
Desde el sitio firebug http://getfirebug.com/logging/
fuente
Siguiendo el consejo de Felix Klings, lo probé en mi navegador Chrome.
console.dir([1,2])da el siguiente resultado:Mientras
console.log([1,2])da el siguiente resultado:Así que creo que
console.dir()debería usarse para obtener más información como prototipos, etc. en matrices y objetos.fuente
Diferencia entre
console.log()yconsole.dir():Aquí está la diferencia en pocas palabras:
console.log(input): El navegador registra de forma muy bien formateadaconsole.dir(input): El navegador registra solo el objeto con todas sus propiedadesEjemplo:
El siguiente código:
Registra lo siguiente en las herramientas de desarrollo de Google:
fuente
Ninguna de las respuestas anteriores 7 menciona que
console.dirapoya los argumentos adicionales :depth,showHiddeny si va a utilizarcolors.De particular interés es
depth, que (en teoría) permite atravesar objetos en más de los 2 niveles predeterminados queconsole.logadmite.Escribí "en teoría" porque en la práctica cuando tenía un objeto Mongoose y corría
console.log(mongoose)yconsole.dir(mongoose, { depth: null }), el resultado era el mismo. Lo que realmente recursó profundamente en elmongooseobjeto fue usarutil.inspect:fuente