i) quelle est la différence entre ces deux objets
La réponse simple est que cela [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 implémentations plus récentes, les objets DOM héritent de l'Object natif et ont des noms de classes internes (tels que HTMLElement , Window , etc.). ActiveXObject propriétaire d'IE est un autre exemple d'objet hôte.
[object]
est le plus souvent observé lors de l'alerte d'objets DOM dans Internet Explorer 7 et versions antérieures, 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 au format [object [[Class]]]
, où [[Class]]
est le nom de classe interne tel que Object , Array , Date , RegExp , etc. Vous pouvez appliquer cette méthode à n'importe quel objet (y compris les objets hôtes), en utilisant
Object.prototype.toString.apply(obj);
De nombreuses isArray
implémentations utilisent cette technique pour découvrir si un objet est en fait un tableau (bien qu'il ne soit pas aussi robuste dans IE que dans d'autres navigateurs ).
iii) ce que contient toutes les propriétés cet objet et les valeurs de chaque propriété
Dans ECMAScript 3, vous pouvez parcourir des propriétés énumérables à l'aide d'une for...in
boucle. Notez que la plupart des propriétés intégrées ne sont pas énumérables. La même chose est vraie pour certains objets hôtes. Dans 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.