Love Frontend
Сообщество
фронтенд разработчиков
EN

Разница между примитивными числами и объектами Number

Автор: qubal
Дата публикации: 12.10.2019

Все мы знаем, что такое цифры в JS и математике.

А есть конструктор Number: он создает объект-обертку. Это тоже набор свойств, но они уже относятся к определенному типу, а не элементу

Например:

let x = new Number(111);
let y = 10;

Переменная x - результат объявления объекта-обертки типа число. Ничего необычного, кроме того, что я объявил конструктор объектов - Number(...), до момента, пока интерпретатор не дошёл до знака + (плюс), она является объектом, после, вызовется Object.prototype.valueOf(), который сделает x обычным числом 111, над которым можно выполнять все арифметические операции.

Если мы сложим x и y, то мы получим 121. Все, что я писал подтвердилось.

let x = new Number(111);
let y = 10;
x + y // 121

Но! Если мы рассмотрим типы объектов. То вывод будет другой.

let x = new Number(111);
let y = 10;
typeof x // object
typeof y // number

Тогда, в чем же разница? Зачем нужен этот объект? Окей, по-порядку. Объект - набор свойств. Обертка позволяет делать то, что мы не можем делать с обычными цифрами.

К примеру, создадим другую переменную, больше 1000

const z = 1000;
z.toExponential(); // 1e+3
z.toFixed(3); // 1000.000

А можем и не создавать:
1000..toExponential() тоже сработает, результат будет один и тот же.

А теперь, веселый факт, до которого, в принципе можно прийти логически, но я защищу себя от тапков, возможно летящих в мой адрес.

Если ты, дорогой читатель, напишешь вместо const a = new Number(10000); Что-то вроде этого const a = Number(10000);

То ты будешь неприятно огорчён, потому что ключевое слово new создаёт объект типа Number

typeof new Number(10000); // object
typeof Number(10000); // number

А просто Number вызывает глобальную функцию, которая возвращает примитивное значение.

Поздравляю, теперь ты знаешь в чем же разница между простыми переменными и объектами типа Number.

Оставьте свой e-mail чтобы получать уведомления о свежих статьях.