i) apa perbedaan antara kedua objek ini
Jawaban sederhananya adalah yang [object]menunjukkan objek host yang tidak memiliki kelas internal. Objek host adalah objek yang bukan bagian dari implementasi ECMAScript yang Anda kerjakan, tetapi disediakan oleh host sebagai ekstensi. DOM adalah contoh umum dari objek host, meskipun dalam implementasi yang paling baru objek DOM mewarisi dari Objek asli dan memiliki nama kelas internal (seperti HTMLElement , Window , dll). ActiveXObject milik IE adalah contoh lain dari objek host.
[object] paling sering terlihat saat memberi tahu objek DOM di Internet Explorer 7 dan yang lebih rendah, karena mereka adalah objek host yang tidak memiliki nama kelas internal.
ii) Jenis Objek apa ini
Anda bisa mendapatkan "tipe" (kelas internal) objek menggunakan Object.prototype.toString. Spesifikasi mengharuskannya selalu mengembalikan string dalam format [object [[Class]]], di mana [[Class]]nama kelas internal seperti Object , Array , Date , RegExp , dll. Anda dapat menerapkan metode ini ke objek apa pun (termasuk objek host), menggunakan
Object.prototype.toString.apply(obj);
Banyak isArrayimplementasi menggunakan teknik ini untuk menemukan apakah suatu objek sebenarnya adalah sebuah array (meskipun tidak sekuat di IE seperti di browser lain ).
iii) apa semua properti yang dikandung objek ini dan nilai dari setiap properti
Dalam ECMAScript 3, Anda dapat melakukan iterasi pada properti yang dapat dihitung menggunakan for...inloop. Perhatikan bahwa sebagian besar properti bawaan tidak dapat dihitung. Hal yang sama berlaku untuk beberapa objek host. Di ECMAScript 5, Anda bisa mendapatkan array yang berisi nama semua properti yang tidak diwarisi menggunakan Object.getOwnPropertyNames(obj). Array ini akan berisi nama properti non-enumerable dan enumerable.