4 votes

Performance - Que fait Object(obj) ?

Snippet de underscore.js pour tester l'objet

_.isObject = function(obj) {
    return obj === Object(obj);
  };

Que fait-elle exactement pour vérifier le type ?

Un jsperf montre que cela est plus rapide que d'utiliser un contrôle conventionnel, c'est pourquoi il est utilisé.

5voto

Le constructeur Object crée une enveloppe d'objet pour la valeur donnée. Si la valeur est nulle ou indéfinie, il créera et retournera un objet vide, sinon, il retournera un objet d'un type qui correspond à la valeur donnée.

Fuente

1voto

Jacob Points 33729

Je ne peux pas trouver la documentation pertinente, mais il semble que la Object renvoie un nouvel objet qui englobe la valeur transmise ou renvoie l'argument s'il s'agit déjà d'un objet ; sinon, la fonction === retournerait toujours faux.

Object(5) === 5         // false, Object(5) creates Number object
Object(null) === null   // false, Object(null) creates an empty object

var foo = { prop: 'value' };
Object(foo) === foo     // true!? Argument is not wrapped

Il semble que ce comportement fonctionne pour tester si une valeur est un objet.

Mise à jour

Il semble que ce soit dans la spécification :

Lorsque la fonction Objet est appelée sans argument ou avec une seule valeur d'argument, les étapes suivantes sont suivies :
1. Si la valeur est nulle, indéfinie ou non fournie, crée et renvoie un nouvel objet Object exactement comme si le constructeur Object intégré standard avait été appelé avec les mêmes arguments (15.2.2.1).
2. Retourner ToObject(valeur).

Et ToObject est "le résultat est l'objet d'entrée". est également définie dans la spécification .

1voto

Bergi Points 104242

Que fait Object(obj) ?

Lisez la spécification EcmaScript sur El Object Constructeur appelé comme une fonction y el abstrait ToObject opération .

Que fait-elle exactement pour vérifier le type ?

Object(obj) ne donnera qu'un objet qui est strictement égales ( === ) a obj (c'est-à-dire la même référence que l'entrée) lorsque l'entrée était une valeur non primitive ( null booléens, chaînes de caractères, nombres, undefined ), c'est-à-dire une EcmaScript Objet (y compris les instances String/Boolean/Number/Array, les fonctions, les autres objets).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X