Я не могу найти соответствующую документацию, но это, кажется, что функция Object
либо возвращает новый объект, который оборачивает переданному в значении или возвращает аргумент, если это уже объект; в противном случае тест ===
всегда будет возвращать значение false.
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
Похоже, что это поведение проверяет, является ли значение объектом.
Update
Оказывается, что это in the spec:
Когда функция Object вызывается без аргументов или с одним значением аргумента, предпринимаются следующие шаги:
1. Если значение является null, undefined или не поставляется, создает и возвращает новый объект Object точно так же, как если бы стандартный встроенный конструктор Object был вызван с теми же аргументами (15.2.2.1).
2. Return ToObject (значение).
И результат ToObject - это входной объект is also defined in the spec.
Что вы подразумеваете под «обычной проверкой»? Если вы имеете в виду 'typeof', то есть также разница в поведении – Bergi
Не могли бы вы ссылаться на этот тест jsperf? – Bergi