Saat debugging menggunakan console.log()
, bagaimana saya bisa mendapatkan objek lengkap?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Output:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Tapi saya ingin juga melihat konten properti f
.
javascript
node.js
debugging
console.log
Michał Perłakowski
sumber
sumber
v0.10.33
console.log()
secara implisit berlakuutil.inspect()
untuk argumennya, dengan asumsi yang pertama bukan format string. Jika Anda senang denganutil.inspect()
opsi default, cukupconsole.log(myObject)
lakukan - tidak perluutil
;console.dir()
melakukan hal yang sama, tetapi hanya menerima `objek untuk diperiksa; setidaknyav0.11.14
, Anda dapat melewatkan objek opsiutil.inspect()
sebagai argumen ke-2; jawaban saya lebih detail.console.log(obj)
masih mencetak [Objek] untuk objek yang bersarang :( Saya benar-benar berharap itu akan berperilaku seperti yang Anda jelaskan.console.log()
ini selalu terbatas pada 2 tingkat (karena menggunakanutil.inspect()
default 's tanpa memungkinkan Anda untuk mengubahnya);console.dir()
memiliki batas yang sama secara default, tetapi Anda dapat mengirimkan objek opsi sebagai argumen ke-2 untuk mengubah itu (yang diteruskan keutil.inspect()
; perhatikan bahwaconsole.dir()
hanya dapat pernah mencetak 1 objek sekaligus, untuk mencetak dengan kedalaman yang tidak terbatas, gunakanconsole.dir(myObject, { depth: null })
.console.dir(myObject, { depth: null })
adalah pekerjaan untuk sayaAnda dapat menggunakan
JSON.stringify
, dan mendapatkan beberapa lekukan yang bagus serta mungkin lebih mudah untuk diingat sintaks.Argumen ketiga menetapkan tingkat indentasi, sehingga Anda dapat menyesuaikannya sesuai keinginan.
Lebih detail di sini jika diperlukan:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
sumber
console.log(JSON.stringify(myObject, null, 4));
cukup keren! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Kompilasi dari banyak jawaban yang berguna dari (setidaknya) Node.js
v0.10.33
(stable) /v0.11.14
(tidak stabil) mungkin melalui (setidaknya)v7.7.4
(versi saat ini pada pembaruan terbaru untuk jawaban ini). Ujung topi untuk Rory O'Kane atas bantuannya.tl; dr
Untuk mendapatkan hasil yang diinginkan untuk contoh dalam pertanyaan, gunakan
console.dir()
:Mengapa tidak
util.inspect()
? Karena sudah di jantung keluaran diagnostik:console.log()
danconsole.dir()
juga REPL Node.js digunakanutil.inspect()
secara implisit . Biasanya tidak perlurequire('util')
dan meneleponutil.inspect()
langsung.Detail di bawah.
console.log()
(dan aliasnyaconsole.info()
):util.inspect()
diterapkan secara otomatis ke setiap argumen:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
util.inspect()
dalam hal ini, yang berarti 2 keterbatasan penting:console.log()
, Anda harus menggunakanconsole.dir()
:console.dir(myObject, { depth: null }
cetakan dengan kedalaman tak terbatas ; Lihat di bawah.util.format()
untuk mencetak argumen yang tersisa berdasarkan string format (lihat di bawah); misalnya:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
util.inspect()
gaya.%j
BUKAN dicetak dengan cantik.console.dir()
:util.inspect()
- pada dasarnya, pembungkusutil.inspect()
tanpa opsi secara default; misalnya:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
util.inspect()
- lihat di bawah; misalnya:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
util.inspect()
dengan pewarnaan sintaks ;yaitu, hanya mengetik nama variabel dan menekan Enter akan mencetak versi yang diperiksa nilainya; misalnya:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()
secara otomatis mencetak objek dan representasi array , tetapi menghasilkan output multiline hanya jika diperlukan .Perilaku pencetakan cantik dapat dikontrol oleh
compact
properti dalamoptions
argumen opsional ;false
menggunakan multi-line output tanpa syarat , sedangkantrue
menonaktifkan pencetakan-cantik sama sekali; itu juga dapat diatur ke angka (standarnya adalah3
) untuk mengontrol perilaku multi-line bersyarat - lihat dokumen .Secara default, output dibungkus sekitar 60 karakter terima kasih, Shrey , terlepas dari apakah output dikirim ke file atau terminal. Dalam praktiknya, karena jeda baris hanya terjadi pada batas properti , Anda akan sering berakhir dengan garis yang lebih pendek, tetapi garis tersebut juga bisa lebih panjang (misalnya, dengan nilai properti yang panjang).
Di v6.3.0 + Anda dapat menggunakan
breakLength
opsi untuk mengganti batas 60 karakter; jika Anda mengaturnyaInfinity
, semuanya adalah output pada satu baris.Jika Anda ingin lebih mengontrol pencetakan cantik, pertimbangkan untuk menggunakan
JSON.stringify()
argumen ke-3 , tetapi perhatikan hal berikut:module
dalam konteks global.JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()
objek pilihan (argumen 2):Objek opsi opsional dapat diberikan yang mengubah aspek tertentu dari string yang diformat; beberapa properti yang didukung adalah:
Lihat dokumen Node.js terbaru untuk daftar lengkap saat ini.
showHidden
true
, maka properti non-enumerable objek [yang ditunjuk untuk tidak muncul ketika Anda menggunakanfor keys in obj
atauObject.keys(obj)
] akan ditampilkan juga. Default kefalse
.depth
null
.colors
false
. Warna dapat disesuaikan [... - lihat tautan].customInspect
false
, makainspect()
fungsi khusus yang didefinisikan pada objek yang sedang diperiksa tidak akan dipanggil. Default ketrue
.util.format()
penampung format-string (argumen 1)Beberapa placeholder yang didukung adalah:
Lihat dokumen Node.js terbaru untuk daftar lengkap saat ini.
%s
- Tali.%d
- Nomor (bilangan bulat dan mengambang).%j
- JSON.%%
- tanda persen tunggal ('%'). Ini tidak menggunakan argumen.sumber
console.dir(...)
tanpa melakukan pengetikan:show = (v, depth=null)=> console.dir(v,{depth:depth})
dan kemudian menyebutnya seperti begitushow(variable)
ataushow(variable, depth=1)
.Metode sederhana lain adalah dengan mengubahnya menjadi json
sumber
utils
:)Coba ini:
sumber
Sejak Node.js 6.4.0, ini dapat diselesaikan dengan elegan dengan
util.inspect.defaultOptions
:sumber
mungkin
console.dir
itu yang kamu butuhkan.http://nodejs.org/api/console.html#console_console_dir_obj
gunakan opsi util jika Anda membutuhkan lebih banyak kontrol.
sumber
options
objek keutil.inspect
.util.inspect()
.Anda juga bisa melakukannya
sumber
Cara yang baik untuk memeriksa objek adalah dengan menggunakan opsi node --inspect dengan Chrome DevTools untuk Node .
Buka
chrome://inspect/#devices
di chrome dan klik Buka DevTools khusus untuk NodeSekarang setiap objek yang dicatat tersedia di inspektur seperti JS biasa yang berjalan di chrome.
Tidak perlu membuka kembali inspektur, itu terhubung ke simpul secara otomatis segera setelah simpul mulai atau restart. Baik --inspect dan Chrome DevTools untuk Node mungkin tidak tersedia dalam versi Node dan Chrome yang lebih lama.
sumber
node.exe --inspect index.js
Kedua penggunaan ini dapat diterapkan:
sumber
Saya pikir ini bisa bermanfaat bagi Anda.
Sebagaimana disebutkan dalam jawaban ini :
sumber
Anda cukup menambahkan
inspect()
metode ke objek Anda yang akan menimpa representasi objek dalamconsole.log
pesanmisalnya:
kemudian, objek Anda akan direpresentasikan seperti yang diperlukan di console.log dan node shell
sumber
Trik sederhana akan menggunakan
debug
modul untuk menambahkanDEBUG_DEPTH=null
variabel lingkungan saat menjalankan skripEx.
DEBUG = * DEBUG_DEPTH = null node index.js
Dalam kode Anda
sumber
Node REPL memiliki solusi bawaan untuk mengganti cara objek ditampilkan, lihat di sini .
sumber
Opsi termudah:
sumber
myObject
ke kedalaman yang sewenang-wenangJSON.stringify ()
Bagus untuk pemeriksaan mendalam terhadap objek data. Pendekatan ini bekerja pada array bersarang dan objek bersarang dengan array.
sumber