Ketika saya console.log()
sebuah objek dalam program JavaScript saya, saya hanya melihat hasilnya [object Object]
, yang tidak terlalu membantu dalam mencari tahu objek apa (atau bahkan tipe objek apa) itu.
Di C # saya terbiasa menimpa ToString()
agar dapat menyesuaikan representasi debugger dari suatu objek. Apakah ada hal serupa yang dapat saya lakukan di JavaScript?
javascript
debugging
tostring
devios1
sumber
sumber
typeof
).Jawaban:
Anda juga dapat mengganti
toString
dalam Javascript. Lihat contoh:Lihat diskusi ini tentang cara menentukan nama tipe objek di JavaScript.
sumber
toString
properti prototipe ,Object.prototype.toString.call(f)
akan tetap ditampilkan[object Object]
.Timpa pertama
toString
untuk objek atau prototipe Anda:Kemudian konversikan ke string untuk melihat representasi string dari objek:
Jika Anda tidak menyukai pengetikan tambahan, Anda dapat membuat fungsi yang mencatat representasi string dari argumennya ke konsol:
Pemakaian:
Memperbarui
E2015 menyediakan sintaks yang jauh lebih baik untuk hal ini, tetapi Anda harus menggunakan transpiler seperti Babel :
sumber
Cara mudah untuk mendapatkan keluaran yang dapat di-debug di JS browser adalah dengan membuat serialisasi objek ke JSON. Jadi Anda bisa menelepon seperti
Jadi misalnya,
alert("Blah! " + JSON.stringify({key: "value"}));
menghasilkan peringatan dengan teksBlah! {"key":"value"}
sumber
Jika Anda menggunakan Node, mungkin perlu dipertimbangkan
util.inspect
.Ini akan menghasilkan:
Sedangkan versi tanpa pemeriksaan cetakan:
sumber
Ganti saja
toString()
metode ini.Contoh sederhana:
Ini bahkan lebih baik ketika Anda mendefinisikan tipe baru:
sumber
v0.10.*
atau ChromeVersion 32.0.1700.102
. Saat memanggil toString secara langsung (lame) atau menggunakan pemaksaan tipe (lamer) akan bekerja dengan ini, konsol [/ info | log /] menggunakan toString pra-mod lama.Jika objek ditentukan sendiri, Anda selalu dapat menambahkan toString override.
sumber
Dengan literal template :
sumber
Tambahkan properti 'Symbol.toStringTag' ke objek atau kelas kustom.
Nilai string yang ditugaskan padanya akan menjadi deskripsi string default karena diakses secara internal oleh
Object.prototype.toString()
metode tersebut.Sebagai contoh:
Tampilkan cuplikan kode
Beberapa jenis Javascript seperti Maps dan Promises memiliki
toStringTag
simbol bawaan yang ditentukanKarena
Symbol.toStringTag
merupakan simbol yang terkenal , kita dapat mereferensikannya dan memverifikasi bahwa tipe di atas memiliki properti Symbol.toStringTag -sumber
toString()
secara langsung satu-satunya cara untuk mencapainyafunction MyObj() {} Object.prototype.toString.call(new MyObj()) // "[object MyObj]"
?Log konsol Chrome memungkinkan Anda memeriksa objek.
sumber
console.log("this is my object:", obj)
.-Operasi ini membutuhkan banyak waktu untuk diselesaikan, dan penggunaannya tidak disarankan menurut dokumen mozilla: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/proto
-Tampaknya, browser modern tidak lagi menggunakan .prototype dan ECMA6 menetapkan penggunaan proper__proto__ sebagai gantinya.
Jadi misalnya, jika Anda mendefinisikan geoposisi objek Anda sendiri, Anda harus memanggil properti __proto__ daripada .prototype :
sumber
Berikut adalah contoh cara merangkai objek Map:
sumber
Anda dapat memberi objek kustom apa pun metode toStringnya sendiri, atau menulis metode umum yang dapat Anda panggil pada objek yang Anda lihat-
sumber
Daripada menimpa
toString()
, jika Anda menyertakan Prototipe JavaScript Library , Anda dapat menggunakanObject.inspect()
untuk mendapatkan representasi yang jauh lebih berguna.Kerangka kerja paling populer menyertakan sesuatu yang serupa.
sumber
Anda dapat memperpanjang atau mengganti di JS
sumber
sumber