i) Was ist der Unterschied zwischen diesen beiden Objekten?
Die einfache Antwort gibt an, dass [object]ein Hostobjekt keine interne Klasse hat. Ein Host-Objekt ist ein Objekt, das nicht Teil der ECMAScript-Implementierung ist, mit der Sie arbeiten, sondern vom Host als Erweiterung bereitgestellt wird. Das DOM ist ein häufiges Beispiel für Hostobjekte , obwohl in den meisten neueren Implementierungen DOM-Objekte vom nativen Objekt erben und interne Klassennamen haben (z. B. HTMLElement , Window usw.). Das proprietäre ActiveXObject von IE ist ein weiteres Beispiel für ein Hostobjekt.
[object] wird am häufigsten beim Warnen von DOM-Objekten in Internet Explorer 7 und niedriger angezeigt, da es sich um Hostobjekte handelt, die keinen internen Klassennamen haben.
ii) um welche Art von Objekt handelt es sich?
Sie können den "Typ" (interne Klasse) des Objekts mit abrufen Object.prototype.toString. Die Spezifikation erfordert, dass immer eine Zeichenfolge im Format zurückgegeben wird [object [[Class]]], wobei [[Class]]der interne Klassenname wie Objekt , Array , Datum , RegExp usw. angegeben ist. Sie können diese Methode mit jedem Objekt (einschließlich Hostobjekten) anwenden
Object.prototype.toString.apply(obj);
Viele isArrayImplementierungen verwenden diese Technik, um festzustellen, ob ein Objekt tatsächlich ein Array ist (obwohl es im IE nicht so robust ist wie in anderen Browsern ).
iii) welche Eigenschaften dieses Objekt enthält und welche Werte jede Eigenschaft hat
In ECMAScript 3 können Sie mithilfe einer for...inSchleife über aufzählbare Eigenschaften iterieren . Beachten Sie, dass die meisten integrierten Eigenschaften nicht aufzählbar sind. Gleiches gilt für einige Hostobjekte. In ECMAScript 5 können Sie mithilfe von ein Array abrufen, das die Namen aller nicht vererbten Eigenschaften enthält Object.getOwnPropertyNames(obj). Dieses Array enthält nicht aufzählbare und aufzählbare Eigenschaftsnamen.