i) quelle est la différence entre ces deux objets
La réponse simple est que [object]
indique un objet hôte qui n'a pas de classe interne. Un objet hôte est un objet qui ne fait pas partie de l'implémentation ECMAScript avec laquelle vous travaillez, mais qui est fourni par l'hôte en tant qu'extension. Le DOM est un exemple courant d'objets hôtes, bien que dans la plupart des nouvelles implémentations, les objets DOM héritent de l'objet natif et ont des noms de classe internes (tels que HTMLElement, Window, etc). L'objet hôte ActiveXObject propriétaire d'IE est un autre exemple d'objet hôte.
[object]
est le plus souvent vu lors de l'alerte des objets DOM dans Internet Explorer 7 et inférieur, car ce sont des objets hôtes qui n'ont pas de nom de classe interne.
ii) quel type d'objet est-ce
Vous pouvez obtenir le "type" (classe interne) de l'objet en utilisant Object.prototype.toString
. La spécification exige qu'elle renvoie toujours une chaîne dans le format [object [[Class]]]
, où [[Class]]
est le nom de la classe interne comme Object, Array, Date, RegExp, etc. Vous pouvez appliquer cette méthode à n'importe quel objet (y compris des objets hôtes), en utilisant
Object.prototype.toString.apply(obj);
De nombreuses implémentations de isArray
utilisent cette technique pour découvrir si un objet est réellement un tableau (bien que ce ne soit pas aussi robuste dans IE que dans d'autres navigateurs).
iii) quelles sont toutes les propriétés que cet objet contient et les valeurs de chaque propriété
En ECMAScript 3, vous pouvez itérer sur les propriétés énumérables en utilisant une boucle for...in
. Notez que la plupart des propriétés intégrées ne sont pas énumérables. Il en va de même pour certains objets hôtes. En ECMAScript 5, vous pouvez obtenir un tableau contenant les noms de toutes les propriétés non héritées en utilisant Object.getOwnPropertyNames(obj)
. Ce tableau contiendra des noms de propriétés non énumérables et énumérables.