No Chrome, o console
objeto define dois métodos que parecem fazer a mesma coisa:
console.log(...)
console.dir(...)
Li em algum lugar on-line que dir
tira uma cópia do objeto antes de registrá-lo, enquanto log
apenas passa a referência ao console, o que significa que quando você inspeciona o objeto que registrou, ele pode ter sido alterado. No entanto, alguns testes preliminares sugerem que não há diferença e que eles sofrem com a exibição potencial de objetos em estados diferentes do que quando foram registrados.
Tente isso no console do Chrome ( Ctrl+ Shift+ J) para ver o que quero dizer:
> o = { foo: 1 }
> console.log(o)
> o.foo = 2
Agora, expanda a [Object]
instrução abaixo do log e observe que ela é exibida foo
com o valor 2. O mesmo acontece se você repetir a experiência usando em dir
vez de log
.
Minha pergunta é: por que essas duas funções aparentemente idênticas existem console
?
fonte
console.log([1,2])
econsole.dir([1,2])
você verá a diferença.console.dir
não muda, por isso faz uma grande diferença.console.dir()
: esse recurso não é padrão ! Portanto, não o use na produção;)Respostas:
No Firefox, essas funções se comportam de maneira bem diferente:
log
somente imprime umatoString
representação, enquantodir
imprime uma árvore navegável.No Chrome,
log
já imprime uma árvore - na maioria das vezes . No entanto, o Chromelog
ainda especifica certas classes de objetos, mesmo que tenham propriedades. Talvez o exemplo mais claro de diferença seja uma expressão regular:Você também pode ver uma diferença clara com matrizes (por exemplo,
console.dir([1,2,3])
) que sãolog
definidas de maneira diferente dos objetos normais:Objetos DOM também exibem comportamento diferente, conforme observado em outra resposta .
fonte
console.log
parece ser a versão simplificada "Firefox" que parecetoString
mais uma árvore do que uma árvore. Ainda não tenho certeza quando eles mudaram, mas o fizeram.console.log
ou abre mais tarde. Sim com certeza. :-)console.log
, mas comconsole.dir
, você pode verprototype
,arguments
propriedades.console.log
econsole.dir
realmente voltar a mesma representação em[1,2,3]
no Firefox.Existe outra diferença útil no Chrome ao enviar elementos DOM para o console.
Aviso prévio:
console.log
imprime o elemento em uma árvore semelhante a HTMLconsole.dir
imprime o elemento em uma árvore semelhante a JSONEspecificamente,
console.log
dá tratamento especial aos elementos DOM, enquantoconsole.dir
não. Isso geralmente é útil ao tentar ver a representação completa do objeto DOM JS.Há mais informações na referência da API do Chrome Console sobre esta e outras funções.
fonte
Acho que o Firebug faz diferente das ferramentas de desenvolvimento do Chrome. Parece que o Firebug fornece uma versão stringizada do objeto, enquanto
console.dir
fornece um objeto expansível. Ambos oferecem o objeto expansível no Chrome, e acho que é daí que a confusão pode surgir. Ou é apenas um bug no Chrome.No Chrome, ambos fazem a mesma coisa. Ao expandir seu teste, notei que o Chrome obtém o valor atual do objeto quando você o expande.
Você pode usar o seguinte para obter uma versão rigorosa de um objeto, se é isso que deseja ver. Isso mostrará como é o objeto no momento em que essa linha é chamada, não quando você o expande.
fonte
Use console.dir () para gerar um objeto navegável no qual você pode clicar em vez da versão .toString (), assim:
Como mostrar o objeto completo no console do Chrome?
fonte
No site do firebug http://getfirebug.com/logging/
fonte
Seguindo o conselho de Felix Klings, experimentei no meu navegador Chrome.
console.dir([1,2])
fornece a seguinte saída:While
console.log([1,2])
fornece a seguinte saída:Então eu acredito que
console.dir()
deveria ser usado para obter mais informações, como protótipos etc. em matrizes e objetos.fonte
Diferença entre
console.log()
econsole.dir()
:Aqui está a diferença em poucas palavras:
console.log(input)
: O navegador faz logon de maneira bem formatadaconsole.dir(input)
: O navegador registra apenas o objeto com todas as suas propriedadesExemplo:
O código a seguir:
Registra o seguinte nas ferramentas de desenvolvimento do google:
fonte
Nenhum dos 7 respostas anteriores mencionou que
console.dir
suporta argumentos extras :depth
,showHidden
e se ao usocolors
.De particular interesse é o
depth
que (em teoria) permite a movimentação de objetos em mais do que os 2 níveis padrãoconsole.log
compatíveis.Eu escrevi "em teoria" porque, na prática, quando eu tinha um objeto Mongoose e correu
console.log(mongoose)
econsole.dir(mongoose, { depth: null })
, a saída era a mesma. O que realmente se repetiu profundamente nomongoose
objeto estava usandoutil.inspect
:fonte