Di Chrome console
objek mendefinisikan dua metode yang tampaknya melakukan hal yang sama:
console.log(...)
console.dir(...)
Saya membaca di suatu tempat online yang dir
mengambil salinan objek sebelum login, sedangkan log
hanya melewati referensi ke konsol, yang berarti bahwa pada saat Anda pergi untuk memeriksa objek yang Anda login, mungkin telah berubah. Namun beberapa pengujian awal menunjukkan bahwa tidak ada perbedaan dan bahwa mereka berdua berpotensi menunjukkan objek di negara yang berbeda daripada ketika mereka login.
Coba ini di konsol Chrome ( Ctrl+ Shift+ J) untuk melihat apa yang saya maksud:
> o = { foo: 1 }
> console.log(o)
> o.foo = 2
Sekarang, perluas di [Object]
bawah pernyataan log dan perhatikan bahwa itu ditampilkan foo
dengan nilai 2. Hal yang sama berlaku jika Anda mengulangi percobaan menggunakan dir
bukan log
.
Pertanyaan saya adalah, mengapa kedua fungsi yang tampaknya identik ini ada console
?
sumber
console.log([1,2])
danconsole.dir([1,2])
Anda akan melihat perbedaannya.console.dir
tidak berubah, jadi itu membuat perbedaan besar.console.dir()
: fitur ini tidak standar ! Jadi jangan menggunakannya pada produksi;)Jawaban:
Di Firefox, fungsi ini berperilaku sangat berbeda:
log
hanya mencetak atoString
representasi, sedangkandir
mencetak pohon yang bisa dinavigasi.Di Chrome,
log
sudah mencetak pohon - sebagian besar waktu . Namun, Chromelog
masih merangkai kelas objek tertentu, bahkan jika mereka memiliki properti. Mungkin contoh paling jelas dari perbedaan adalah ekspresi reguler:Anda juga dapat melihat perbedaan yang jelas dengan array (misalnya,
console.dir([1,2,3])
)log
berbeda dari objek normal:Objek DOM juga menunjukkan perilaku yang berbeda, seperti dicatat pada jawaban lain .
sumber
console.log
tampaknya versi "Firefox" yang disederhanakan terlihat sepertitoString
pohon. Saya belum yakin kapan mereka mengubahnya, tetapi mereka melakukannya.console.log
atau membukanya nanti. Ya benar :-)console.log
, tetapi denganconsole.dir
, Anda dapat melihatprototype
,arguments
sifat.console.log
danconsole.dir
benar - benar mengembalikan representasi yang sama di[1,2,3]
dalam Firefox.Perbedaan lain yang bermanfaat di Chrome ada saat mengirim elemen DOM ke konsol.
Memperhatikan:
console.log
mencetak elemen dalam pohon mirip HTMLconsole.dir
mencetak elemen dalam pohon mirip JSONSecara khusus,
console.log
memberikan perlakuan khusus untuk elemen DOM, sedangkanconsole.dir
tidak. Ini sering berguna ketika mencoba untuk melihat representasi penuh dari objek DOM JS.Ada informasi lebih lanjut di referensi Chrome Console API tentang ini dan fungsi lainnya.
sumber
Saya pikir Firebug melakukannya secara berbeda dari alat pengembang Chrome. Sepertinya Firebug memberi Anda versi objek yang diketik sementara
console.dir
memberi Anda objek yang dapat diperluas. Keduanya memberi Anda objek yang dapat diperluas di Chrome, dan saya pikir dari situlah kebingungan itu berasal. Atau itu hanya bug di Chrome.Di Chrome, keduanya melakukan hal yang sama. Memperluas pengujian Anda, saya perhatikan bahwa Chrome mendapatkan nilai objek saat ini saat Anda mengembangkannya.
Anda bisa menggunakan yang berikut ini untuk mendapatkan versi objek yang dirangkai jika itu yang ingin Anda lihat. Ini akan menunjukkan kepada Anda apa objek itu pada saat baris ini dipanggil, bukan ketika Anda memperluasnya.
sumber
Gunakan console.dir () untuk menampilkan objek yang dapat dijelajahi yang dapat Anda klik alih-alih versi .toString (), seperti ini:
Bagaimana cara menampilkan objek penuh di konsol Chrome?
sumber
Dari situs firebug http://getfirebug.com/logging/
sumber
Mengikuti saran Felix Klings saya mencobanya di browser chrome saya.
console.dir([1,2])
memberikan hasil sebagai berikut:Sambil
console.log([1,2])
memberikan output berikut:Jadi saya percaya
console.dir()
harus digunakan untuk mendapatkan lebih banyak informasi seperti prototipe dll dalam array dan objek.sumber
Perbedaan antara
console.log()
danconsole.dir()
:Inilah perbedaan singkatnya:
console.log(input)
: Browser log dengan cara yang diformat dengan baikconsole.dir(input)
: Browser hanya mencatat objek dengan semua propertinyaContoh:
Kode berikut:
Catat yang berikut ini di alat google dev:
sumber
Tak satu pun dari 7 jawaban sebelumnya disebutkan bahwa
console.dir
dukungan argumen ekstra :depth
,showHidden
, dan apakah penggunaancolors
.Yang menarik adalah
depth
, yang (dalam teori) memungkinkan travering objek ke lebih dari 2 level default yangconsole.log
mendukung.Saya menulis "dalam teori" karena dalam praktiknya ketika saya memiliki objek luwak dan berlari
console.log(mongoose)
danconsole.dir(mongoose, { depth: null })
, hasilnya sama. Apa yang sebenarnya recursed dalam kemongoose
objek itu menggunakanutil.inspect
:sumber