Dans Chrome, l' console
objet définit deux méthodes qui semblent faire la même chose:
console.log(...)
console.dir(...)
J'ai lu quelque part en ligne qui dir
prend une copie de l'objet avant de l'enregistrer, alors que log
je passe simplement la référence à la console, ce qui signifie qu'au moment où vous allez inspecter l'objet que vous avez enregistré, il peut avoir changé. Cependant, certains tests préliminaires suggèrent qu'il n'y a pas de différence et qu'ils souffrent tous les deux de la possibilité de montrer des objets dans des états différents de ceux lorsqu'ils étaient enregistrés.
Essayez ceci dans la console Chrome ( Ctrl+ Shift+ J) pour voir ce que je veux dire:
> o = { foo: 1 }
> console.log(o)
> o.foo = 2
Maintenant, développez le [Object]
sous l'instruction log et notez qu'elle s'affiche foo
avec une valeur de 2. Il en va de même si vous répétez l'expérience en utilisant dir
au lieu delog
.
Ma question est, pourquoi ces deux fonctions apparemment identiques existent-elles console
?
la source
console.log([1,2])
etconsole.dir([1,2])
vous verrez la différence.console.dir
ne change pas, donc cela fait une grande différence.console.dir()
: cette fonctionnalité n'est pas standard ! Alors ne l'utilisez pas en production;)Réponses:
Dans Firefox, ces fonctions se comportent très différemment:
log
imprime uniquement unetoString
représentation, tandis quedir
imprime une arborescence navigable.Dans Chrome,
log
imprime déjà un arbre - la plupart du temps . Cependant, Chromelog
stringifie toujours certaines classes d'objets, même si elles ont des propriétés. L'exemple le plus clair de différence est peut-être une expression régulière:Vous pouvez également voir une nette différence avec les tableaux (par exemple,
console.dir([1,2,3])
) qui sontlog
ged différemment des objets normaux:Les objets DOM présentent également des comportements différents, comme indiqué dans une autre réponse .
la source
console.log
semble que ce soit la version simplifiée de "Firefox" qui ressembletoString
à un arbre plutôt qu'à un arbre. Je ne sais pas encore quand ils l'ont changé, mais ils l'ont fait.console.log
ou de son ouverture ultérieure. Oui vraiment. :-)console.log
, mais avecconsole.dir
, vous pouvez voir lesprototype
,arguments
propriétés.console.log
etconsole.dir
revenir en fait la même représentation[1,2,3]
dans Firefox.Une autre différence utile dans Chrome existe lors de l'envoi d'éléments DOM à la console.
Remarquer:
console.log
imprime l'élément dans une arborescence de type HTMLconsole.dir
imprime l'élément dans un arbre de type JSONPlus précisément,
console.log
donne un traitement spécial aux éléments DOM, alorsconsole.dir
que non. Cela est souvent utile lorsque vous essayez de voir la représentation complète de l'objet DOM JS.La référence de l'API de la console Chrome contient plus d'informations sur cette fonction et d'autres.
la source
Je pense que Firebug le fait différemment des outils de développement de Chrome. Il semble que Firebug vous donne une version chaîne de l'objet tout en
console.dir
vous donnant un objet extensible. Les deux vous donnent l'objet extensible dans Chrome, et je pense que c'est de là que la confusion pourrait provenir. Ou c'est juste un bug dans Chrome.Dans Chrome, les deux font la même chose. En développant votre test, j'ai remarqué que Chrome obtient la valeur actuelle de l'objet lorsque vous le développez.
Vous pouvez utiliser ce qui suit pour obtenir une version chaîne d'un objet si c'est ce que vous voulez voir. Cela vous montrera ce qu'est l'objet au moment où cette ligne est appelée, pas lorsque vous la développez.
la source
Utilisez console.dir () pour sortir un objet parcourable sur lequel vous pouvez cliquer au lieu de la version .toString (), comme ceci:
Comment afficher l'objet complet dans la console Chrome?
la source
Depuis le site Firebug http://getfirebug.com/logging/
la source
En suivant les conseils de Felix Klings, je l'ai essayé dans mon navigateur Chrome.
console.dir([1,2])
donne la sortie suivante:While
console.log([1,2])
donne la sortie suivante:Je pense donc que cela
console.dir()
devrait être utilisé pour obtenir plus d'informations comme le prototype, etc. dans les tableaux et les objets.la source
Différence entre
console.log()
etconsole.dir()
:Voici la différence en bref:
console.log(input)
: Le navigateur se connecte de manière bien formatéeconsole.dir(input)
: Le navigateur enregistre uniquement l'objet avec toutes ses propriétésExemple:
Le code suivant:
Enregistre les éléments suivants dans les outils de développement Google:
la source
Aucun des 7 réponses précédentes mentionné que vient
console.dir
appuyer les arguments supplémentaires :depth
,showHidden
et si l'utilisationcolors
.Un intérêt particulier est
depth
, qui (en théorie) permet de déplacer des objets dans plus que les 2 niveaux par défaut queconsole.log
prend en charge.J'ai écrit "en théorie" parce qu'en pratique, quand j'avais un objet Mongoose et que je courais
console.log(mongoose)
etconsole.dir(mongoose, { depth: null })
, la sortie était la même. Ce qui en fait récursifs profondément dans l'mongoose
objet a été à l' aideutil.inspect
:la source