Итак, я рассматриваю спецификацию ES5 при определении того, что делают new Object и Object. К моему удивлению,
-
new Objectописывает целый алгоритм работы конструктора объектов - обработку того, что происходит с разными типами значений. В основном вызываетToObjectдля не-объектов - идентификация объектов и строит на null и undefined. -
Objectимеет специальный первый шаг для null и undefined, где он создает объект, а затем вызываетToObjectдля примитивов и идентификаторов объектов.
Прочитав описание несколько раз - они кажутся одинаковыми. Однако, очевидно, из спецификации они делают что-то другое. Например, в Array - вызов new Array указан как вызов функции Array(…) эквивалентен выражению создания объекта new Array(…) с теми же аргументами.
Итак - какая разница между new Object и Object? Почему они были заданы по-разному?
Для удобства - здесь ссылка на спецификацию.