Всем добрый день.
Подскажите пожалуйста, почему экземпляры встроенных объектов, например, Number, String, Boolean, Object, Function мы создаем литерально, то есть объявляем переменную и присваиваем ей значение. А некоторые экземпляры объектов, которые тоже являются встроенными, мы создаём уже с помощью оператора new, например Promise или Date? Ведь те значения, строки, числа, булевые значения, объекты объявленные литерально, функции (которые мы объявляем как function declaration, не присваивая какой-либо переменной) - они ведь тоже являются экземплярами встроенных объектов, как и:
const promise = new Promise(/*some function as parameter*/);
const date = new Date();
Только promise и date мы почему-то создаем через оператор new, а те же числа, строки, объекты, булевые значения, function declaration/expression без оператора new. Объясните пожалуйста, почему именно так? Если любые значения являются по сути экземплярами определенных встроенных объектов.
Если я сделаю вот так:
console.log(new Number(1) + new Number(2)); // выводится 3 и typeof полученного значения number
То есть всё в порядке, это то же самое, как если бы мы сделали:
console.log(1 + 2);
И ничего не изменилось бы, но всё же не пойму, что почему некоторые экземпляры мы создаем исключительно через оператор new ? А не литерально.
Важное замечание: Я сейчас не привязываюсь конкретно к встроенным объектам Promise и Date, экземпляры которых создаются через new, я их привёл исключительно в качестве примера, есть и куча других встроенных объектов, экземпляры которых мы создаем с помощью new. Поэтому не привязывайтесь пожалуйста в данном вопросе конкретно к Promise и Date!