i) qual è la differenza tra questi due oggetti
La semplice risposta è che [object]indica un oggetto host che non ha una classe interna. Un oggetto host è un oggetto che non fa parte dell'implementazione ECMAScript con cui stai lavorando, ma è fornito dall'host come estensione. Il DOM è un esempio comune di oggetti host, sebbene nella maggior parte delle implementazioni più recenti gli oggetti DOM ereditino dall'oggetto nativo e abbiano nomi di classi interne (come HTMLElement , Window , ecc.). ActiveXObject proprietario di IE è un altro esempio di oggetto host.
[object] è più comunemente visto quando si avvisano gli oggetti DOM in Internet Explorer 7 e versioni precedenti, poiché sono oggetti host che non hanno un nome di classe interno.
ii) che tipo di oggetto è questo
Puoi ottenere il "tipo" (classe interna) dell'oggetto usando Object.prototype.toString. La specifica richiede che restituisca sempre una stringa nel formato [object [[Class]]], dove [[Class]]è il nome della classe interna come Object , Array , Date , RegExp , ecc. È possibile applicare questo metodo a qualsiasi oggetto (inclusi gli oggetti host), utilizzando
Object.prototype.toString.apply(obj);
Molte isArrayimplementazioni utilizzano questa tecnica per scoprire se un oggetto è effettivamente un array (sebbene non sia così robusto in IE come in altri browser ).
iii) cosa contiene tutte le proprietà questo oggetto e i valori di ciascuna proprietà
In ECMAScript 3, puoi iterare su proprietà enumerabili utilizzando un for...inciclo. Notare che la maggior parte delle proprietà integrate non sono enumerabili. Lo stesso vale per alcuni oggetti host. In ECMAScript 5, puoi ottenere un array contenente i nomi di tutte le proprietà non ereditate utilizzando Object.getOwnPropertyNames(obj). Questo array conterrà nomi di proprietà non enumerabili ed enumerabili.