Number() преобразует значение в число.
Это стандартный и явный способ получить числовое представление строки, boolean, null или другого значения.
Синтаксис
Number(value)
value может быть почти любым значением.
Если вызвать Number() без аргумента, результатом будет 0.
console.log(Number()); // 0
Что делает Number()
Number() пытается преобразовать значение в тип number.
console.log(Number("123")); // 123
console.log(Number("3.14")); // 3.14
console.log(Number(true)); // 1
console.log(Number(false)); // 0
Результат всегда имеет тип number.
const result = Number("42");
console.log(result); // 42
console.log(typeof result); // "number"
Строки
Если строка выглядит как число, преобразование сработает.
console.log(Number("123")); // 123
console.log(Number("3.14")); // 3.14
console.log(Number("-50")); // -50
Пустая строка тоже преобразуется, но неожиданно для многих в 0:
console.log(Number("")); // 0
console.log(Number(" ")); // 0
Если строка не является числом, результатом будет NaN.
console.log(Number("123px")); // NaN
console.log(Number("hello")); // NaN
Boolean
Булевы значения преобразуются так:
console.log(Number(true)); // 1
console.log(Number(false)); // 0
null и undefined
Это одно из мест, где часто ошибаются:
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
То есть null даёт 0, а undefined уже даёт NaN.
Массивы и объекты
С массивами и объектами поведение может быть неочевидным:
console.log(Number([])); // 0
console.log(Number([123])); // 123
console.log(Number([1, 2])); // NaN
console.log(Number({})); // NaN
В обычном прикладном коде такие преобразования обычно стараются не использовать намеренно, потому что они читаются неочевидно.
Если результат NaN
При неудачном преобразовании Number() возвращает NaN.
const value = Number("hello");
console.log(value); // NaN
Проверять это лучше через Number.isNaN():
const value = Number("hello");
console.log(Number.isNaN(value)); // true
Number() и parseInt() / parseFloat()
Эти функции решают похожую задачу, но работают по-разному.
console.log(Number("123px")); // NaN
console.log(parseInt("123px")); // 123
console.log(parseFloat("3.14px")); // 3.14
Number() требует, чтобы вся строка целиком была корректным числом.
parseInt() и parseFloat() могут вытащить число только из начала строки.
Поэтому Number() обычно строже и предсказуемее, когда нужна именно полная конвертация.
Number() и new Number()
Это очень важное различие.
const a = Number("123");
const b = new Number("123");
console.log(typeof a); // "number"
console.log(typeof b); // "object"
Number() без new возвращает обычное число.
new Number() создаёт объект-обёртку, и в обычном коде это почти никогда не нужно.
Почему new Number() обычно не используют
Объект-обёртка ведёт себя не так, как обычное число.
const value = new Number(0);
if (value) {
console.log("Условие выполнится");
}
Хотя внутри находится 0, сам объект считается truthy.
Из-за этого new Number() легко создаёт странное поведение и путаницу.
Symbol и BigInt
Некоторые типы ведут себя отдельно.
Number(10n) сработает:
console.log(Number(10n)); // 10
Но при больших BigInt может потеряться точность.
А вот Symbol в число не преобразуется:
Number(Symbol("id")); // TypeError
Когда это полезно
Number() удобно использовать, когда:
- нужно явно преобразовать строку в число
- значение может прийти как строка из формы или input
- хочется получить строгий результат без частичного парсинга
Пример:
const inputValue = "25";
const age = Number(inputValue);
console.log(age); // 25
console.log(typeof age); // "number"
Частые ошибки
Думать, что пустая строка даёт NaN
console.log(Number("")); // 0
Это одна из самых частых неожиданностей.
Путать Number(null) и Number(undefined)
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
Они ведут себя по-разному.
Использовать new Number()
const value = new Number(5);
В обычном коде почти всегда лучше так:
const value = Number(5);
Проверять NaN через ===
const value = Number("hello");
console.log(value === NaN); // false
Для такой проверки нужен Number.isNaN().
Быстрая памятка
Number()преобразует значение в число- без аргумента возвращает
0 - корректная строка даст число, некорректная —
NaN Number(null)даёт0, аNumber(undefined)даётNaNnew Number()создаёт объект и обычно не нужен
Коротко
Number() - это стандартный способ явно преобразовать значение в число в JavaScript. Главное, что стоит запомнить: метод строгий по отношению к строкам, может вернуть NaN, а new Number() почти всегда лучше избегать.