Кратко
СкопированоNumber
— это обёртка над примитивным числовым типом, которая содержит дополнительные значения и методы работы с числами:
- проверки на специальные значения
is
,Na N ( ) is
.Finite ( ) - конвертирование в строку
to
иString ( ) to
.Locale String ( )
Числа автоматически оборачиваются в обёртку Number
при вызове методов над ними.
Как пишется
СкопированоОбернуть числа в Number
можно вручную, вызвав конструктор new
:
const primitive = 50const num = new Number(100)
const primitive = 50 const num = new Number(100)
В этом случае переменные primitive
и num
будут разных типов:
console.log(typeof primitive)// numberconsole.log(typeof num)// objectconsole.log(num == 100)// true, при приведении к числовому типу значения будут одинаковымиconsole.log(num === 100)// false, потому что разные типы данных
console.log(typeof primitive) // number console.log(typeof num) // object console.log(num == 100) // true, при приведении к числовому типу значения будут одинаковыми console.log(num === 100) // false, потому что разные типы данных
Можно вызывать методы на примитиве, JavaScript автоматически обернёт его в обёртку:
const primitive = 5.001console.log(primitive.toFixed(1))// '5.0'console.log(6.04.toFixed(1))// '6.0'
const primitive = 5.001 console.log(primitive.toFixed(1)) // '5.0' console.log(6.04.toFixed(1)) // '6.0'
Если необходимо вызвать методы на целом числе, то нужно либо обернуть число в скобки, либо поставить точку дважды:
console.log((5).toFixed(3))// '5.000'console.log(6..toFixed(3))// '6.000'
console.log((5).toFixed(3)) // '5.000' console.log(6..toFixed(3)) // '6.000'
Как понять
СкопированоОбычно в JavaScript работают с примитивным числовым типом. Например, const num
.
Обёртка содержит дополнительные функции и методы для работы с числами. Они не входят в стандарт типа данных «число» и поэтому выделены в отдельный модуль.
Обёртка используется автоматически и не требует дополнительной работы от программиста. JavaScript сам оборачивает число, когда программист вызывает метод, который находится в обёртке.
Проверки на специальные значения
СкопированоТип данных «число» содержит три специальных значения: NaN
, Infinity
и -
.
Обёртка предоставляет две полезные функции для проверки специальных значений:
1️⃣ Функция Number
— нативный способ проверить значение на NaN
, потому что NaN
не равен ничему, даже самому себе:
const nanResult = 5 * undefinedconsole.log(nanResult == NaN)// falseconsole.log(nanResult === NaN)// falseconsole.log(Number.isNaN(nanResult))// true
const nanResult = 5 * undefined console.log(nanResult == NaN) // false console.log(nanResult === NaN) // false console.log(Number.isNaN(nanResult)) // true
2️⃣ Функция Number
— проверит, что значение не является специальным. Возвращает true
— если при вызове в неё было передано число и false
— если специальное значение или нечисловой тип:
const number = 4const nan = NaNconst inf = Infinityconst string = 'hello'console.log(Number.isFinite(number))// trueconsole.log(Number.isFinite(nan))// falseconsole.log(Number.isFinite(inf))// falseconsole.log(Number.isFinite(string))// false
const number = 4 const nan = NaN const inf = Infinity const string = 'hello' console.log(Number.isFinite(number)) // true console.log(Number.isFinite(nan)) // false console.log(Number.isFinite(inf)) // false console.log(Number.isFinite(string)) // false
Форматирование числа
СкопированоОбёртка содержит несколько методов для форматирования числа:
1️⃣ Метод to
преобразует число в строку в указанной системе счисления. По умолчанию используется десятичная, но можно использовать и другую:
const num = 5console.log(num.toString())// '5'console.log(num.toString(2))// '101' в двоичной системе счисления
const num = 5 console.log(num.toString()) // '5' console.log(num.toString(2)) // '101' в двоичной системе счисления
2️⃣ Метод to
преобразует число в строку с указанным количеством знаков после запятой. Если необходимо, число округляется:
const num = 10.468console.log(num.toFixed(4))// '10.4680'console.log(num.toFixed(3))// '10.468'console.log(num.toFixed(2))// '10.47'console.log(num.toFixed(1))// '10.5'console.log(num.toFixed(0))// '10'
const num = 10.468 console.log(num.toFixed(4)) // '10.4680' console.log(num.toFixed(3)) // '10.468' console.log(num.toFixed(2)) // '10.47' console.log(num.toFixed(1)) // '10.5' console.log(num.toFixed(0)) // '10'
Если нужно округлять до целого, то ноль при вызове можно не передавать:
const num = 10.468console.log(num.toFixed())// '10'
const num = 10.468 console.log(num.toFixed()) // '10'
3️⃣ Метод to
преобразует число в строку, учитывая локаль пользователя.
Локаль — это информация о языке пользователя, а также региональных настройках: какие символы чисел используются, какие разделители между разрядами считаются стандартными и так далее.
Локаль представляет собой строку сформированную по спецификации. Чаще всего используются два вида:
код
. Например,_ языка 'ru'
(русский язык),'de'
(немецкий),'en'
(английский).код
. Например,_ языка - код _ региона de
(австрийский немецкий),- A T 'en
(американский английский),- U S' es
(аргентинский испанский).- A R
По умолчанию используется локаль браузера, но первым аргументом можно передать любую.
const bigNumber = 100_000_000console.log(bigNumber.toLocaleString("ru")) // 100 000 000console.log(bigNumber.toLocaleString("en-US")) // 100,000,000console.log(bigNumber.toLocaleString("ar-SA")) // ١٠٠٬٠٠٠٬٠٠٠
const bigNumber = 100_000_000 console.log(bigNumber.toLocaleString("ru")) // 100 000 000 console.log(bigNumber.toLocaleString("en-US")) // 100,000,000 console.log(bigNumber.toLocaleString("ar-SA")) // ١٠٠٬٠٠٠٬٠٠٠
Вторым аргументом в метод можно передать объект с тонкими настройками форматирования. Например, указать, что форматируемое число — деньги:
const bigNumber = 100_000_000console.log(bigNumber.toLocaleString('es', { style: 'currency', currency: 'EUR' }))// 100.000.000,00 €console.log(bigNumber.toLocaleString('ru', { style: 'currency', currency: 'RUB', minimumFractionDigits: 0 }))// 100 000 000 ₽
const bigNumber = 100_000_000 console.log(bigNumber.toLocaleString('es', { style: 'currency', currency: 'EUR' })) // 100.000.000,00 € console.log(bigNumber.toLocaleString('ru', { style: 'currency', currency: 'RUB', minimumFractionDigits: 0 })) // 100 000 000 ₽
Константы
СкопированоОбёртка хранит несколько полезных констант:
— максимально возможное целое значение числового типа, 253-1;Number . MAX _ SAFE _ INTEGER
— минимально возможное целое значение числового типа, -253-1;Number . MIN _ SAFE _ INTEGER
— максимально большое число, представимое с помощью числового типа;Number . MAX _ VALUE
— минимальное положительное число, представимое с помощью числового типа.Number . MIN _ VALUE
Важно отметить, что
много больше, чем
, из-за особенностей хранения чисел с плавающей точкой.
На практике
Скопированосоветует Скопировано
❗️ Не создавайте руками обёртку, не существует случаев, когда JavaScript не справится с этим сам.
🛠 Если вызывать Number
как функцию, то она приводит переданный аргумент к числовому типу. Если привести не получается, то вернётся NaN
. Например:
Number('123')// 123Number('12.3')// 12.3Number('12.00')// 12Number('')// 0Number(null)// 0Number('0x11')// 17Number('0b11')// 3Number('0o11')// 9Number('foo')// NaNNumber('100a')// NaN
Number('123') // 123 Number('12.3') // 12.3 Number('12.00') // 12 Number('') // 0 Number(null) // 0 Number('0x11') // 17 Number('0b11') // 3 Number('0o11') // 9 Number('foo') // NaN Number('100a') // NaN
Таким образом можно избежать использования функций parse
и parse
, например, при парсинге числа из поля ввода.