Learn JavaScript

Number() - функция для преобразования в число в JavaScript

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) даёт NaN
  • new Number() создаёт объект и обычно не нужен

Коротко

Number() - это стандартный способ явно преобразовать значение в число в JavaScript. Главное, что стоит запомнить: метод строгий по отношению к строкам, может вернуть NaN, а new Number() почти всегда лучше избегать.