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 .