W Chrome console
obiekt definiuje dwie metody, które wydają się robić to samo:
console.log(...)
console.dir(...)
Przeczytałem gdzieś w Internecie, że dir
pobiera kopię obiektu przed jego zalogowaniem, podczas gdy log
po prostu przekazuje odwołanie do konsoli, co oznacza, że zanim przejdziesz do sprawdzenia zalogowanego obiektu, mogło się to zmienić. Jednak niektóre wstępne testy sugerują, że nie ma różnicy i że oboje cierpią z powodu potencjalnie pokazywania obiektów w różnych stanach niż w momencie ich zalogowania.
Wypróbuj to w konsoli Chrome ( Ctrl+ Shift+ J), aby zobaczyć, co mam na myśli:
> o = { foo: 1 }
> console.log(o)
> o.foo = 2
Teraz rozwiń [Object]
poniżej instrukcji dziennika i zauważ, że pokazuje foo
ona wartość 2. To samo dotyczy powtórzenia eksperymentu za pomocą dir
zamiast log
.
Moje pytanie brzmi: dlaczego te dwie pozornie identyczne funkcje istnieją console
?
źródło
console.log([1,2])
iconsole.dir([1,2])
zobaczysz różnicę.console.dir
nie zmienia się, więc robi to dużą różnicę.console.dir()
: ta funkcja jest niestandardowa ! Więc nie używaj go do produkcji;)Odpowiedzi:
W przeglądarce Firefox te funkcje zachowują się zupełnie inaczej:
log
drukuje tylkotoString
reprezentację,dir
a drzewo nawigowalne.W Chrome
log
drukuje już drzewo - przez większość czasu . Jednak Chromelog
nadal określa niektóre klasy obiektów, nawet jeśli mają one właściwości. Być może najbardziej wyraźnym przykładem różnicy jest wyrażenie regularne:Widać też wyraźną różnicę w przypadku tablic (np.
console.dir([1,2,3])
), Które sąlog
oznaczone inaczej niż normalne obiekty:Obiekty DOM również wykazują różne zachowanie, jak zauważono w innej odpowiedzi .
źródło
console.log
wydaje się być uproszczoną wersją „Firefox”, która wyglądatoString
raczej jak drzewo niż drzewo. Nie jestem jeszcze pewien, kiedy to zmienili, ale tak zrobili.console.log
czy później. Tak naprawdę. :-)console.log
, aleconsole.dir
można zobaczyćprototype
,arguments
właściwości.console.log
iconsole.dir
faktycznie przywraca tę samą reprezentację[1,2,3]
w przeglądarce Firefox.Kolejna przydatna różnica w Chrome występuje podczas wysyłania elementów DOM do konsoli.
Ogłoszenie:
console.log
drukuje element w drzewie podobnym do HTMLconsole.dir
drukuje element w drzewie podobnym do JSONW szczególności
console.log
zapewnia specjalne traktowanie elementów DOM, podczasconsole.dir
gdy nie. Jest to często przydatne, gdy próbujesz zobaczyć pełną reprezentację obiektu DOM JS.Więcej informacji na temat interfejsu API konsoli Chrome można znaleźć na temat tej i innych funkcji.
źródło
Myślę, że Firebug robi to inaczej niż narzędzia programistyczne Chrome. Wygląda na to, że Firebug daje ci strunowaną wersję obiektu, a
console.dir
daje obiekt rozwijany. Oba dają ci rozszerzalny obiekt w Chrome i myślę, że stąd może się pojawić zamieszanie. Lub to tylko błąd w Chrome.W Chrome oba działają tak samo. Rozwijając twój test, zauważyłem, że Chrome pobiera bieżącą wartość obiektu po jego rozwinięciu.
Możesz skorzystać z poniższych instrukcji, aby uzyskać strunkową wersję obiektu, jeśli chcesz to zobaczyć. Pokaże to, czym jest obiekt w momencie wywołania tej linii, a nie po jej rozwinięciu.
źródło
Użyj console.dir (), aby wyświetlić obiekt, który można przeglądać, przez który można kliknąć zamiast wersji .toString (), jak poniżej:
Jak wyświetlić pełny obiekt w konsoli Chrome?
źródło
Ze strony firebug http://getfirebug.com/logging/
źródło
Zgodnie z radą Felixa Klingsa wypróbowałem to w mojej przeglądarce Chrome.
console.dir([1,2])
daje następujący wynik:Chociaż
console.log([1,2])
daje następujące dane wyjściowe:Uważam więc, że
console.dir()
powinien być używany do uzyskiwania większej ilości informacji, takich jak prototyp itp., W tablicach i obiektach.źródło
Różnica między
console.log()
iconsole.dir()
:Oto różnica w pigułce:
console.log(input)
: Przeglądarka loguje się w ładnie sformatowany sposóbconsole.dir(input)
: Przeglądarka rejestruje tylko obiekt ze wszystkimi jego właściwościamiPrzykład:
Poniższy kod:
Rejestruje następujące narzędzia Google Dev:
źródło
Żaden z 7 poprzednich odpowiedziach wspomniano, że
console.dir
wsporniki dodatkowych argumentów :depth
,showHidden
i czy do użytkucolors
.Szczególnie interesujące jest to
depth
, które (teoretycznie) pozwala na przemierzanie obiektów na więcej niż domyślne 2console.log
obsługiwane poziomy .Napisałem „teoretycznie”, bo w praktyce, gdy miałem obiektu Mongoose i pobiegł
console.log(mongoose)
iconsole.dir(mongoose, { depth: null })
wyjście było to samo. Co faktycznie recursed głęboko domongoose
obiektu został za pomocąutil.inspect
:źródło