En Chrome, el console
objeto define dos métodos que parecen hacer lo mismo:
console.log(...)
console.dir(...)
Leí en algún lugar en línea que dir
toma una copia del objeto antes de registrarlo, mientras que log
solo 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 = 2
Ahora, expanda [Object]
debajo de la declaración de registro y observe que se muestra foo
con un valor de 2. Lo mismo es cierto si repite el experimento usando en dir
lugar 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.dir
no 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:
log
solo imprime unatoString
representación, mientras quedir
imprime un árbol navegable.En Chrome,
log
ya imprime un árbol, la mayoría de las veces . Sin embargo, Chromelog
aú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ánlog
ged 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.log
parece ser la versión simplificada de "Firefox" que se parecetoString
más a un árbol que a un árbol. Todavía no estoy seguro de cuándo lo cambiaron, pero lo hicieron.console.log
o si la abre más tarde. Sí, en serio. :-)console.log
, pero conconsole.dir
, se puede ver lasprototype
,arguments
propiedades.console.log
y enconsole.dir
realidad 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.log
imprime el elemento en un árbol similar a HTMLconsole.dir
imprime el elemento en un árbol similar a JSONEspecíficamente,
console.log
da un tratamiento especial a los elementos DOM, mientrasconsole.dir
que 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.dir
te 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.dir
apoya los argumentos adicionales :depth
,showHidden
y 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.log
admite.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 elmongoose
objeto fue usarutil.inspect
:fuente