Работа с числами - неотъемлемая часть любого JavaScript-приложения. Однако разработчики часто сталкиваются с непонятным поведением чисел: странными результатами вычислений, ошибками преобразования типов, неверным отображением значений. Эта статья поможет разобраться во всех тонкостях обработки числовых данных в JS. Узнайте, как правильно задавать числа, выполнять вычисления и форматирование, избегать распространенных ловушек. Получите ценные советы по работе с числами от опытного JavaScript-разработчика.
Основы работы с числами в JS
В JavaScript для представления чисел используется тип данных Number. Этот тип позволяет работать как с целыми, так и с дробными числами.
Числа можно задавать разными способами:
- С помощью литералов - просто записывая числовое значение в коде: let n = 15.
- С помощью конструктора Number: let n = new Number(15).
Хотя технически второй вариант создает объект-обертку для числа, на практике это редко необходимо. Лучше использовать литералы для задания чисел.
Диапазон и точность
Диапазон чисел в JavaScript ограничен. Максимально возможное число: Number.MAX_VALUE = 1.7976931348623157e+308. Минимальное число равно -Number.MAX_VALUE.
При выполнении вычислений результат округляется с ограниченной точностью. Это может привести к неожиданным эффектам:
0.1 + 0.2 = 0.30000000000000004
Такая неточность - следствие двоичного представления дробных чисел в памяти. Чтобы минимизировать ее:
- Используйте целые числа вместо дробных где возможно.
- Применяйте округление с помощью методов вида toFixed().
Кроме обычных чисел, в JavaScript есть три специальных числовых значения:
- Infinity - бесконечность, возвращается при переполнении.
- -Infinity - минус бесконечность.
- NaN - не число, результат некорректной операции.
Эти значения тоже относятся к типу Number, но ведут себя особенным образом. Например, NaN при сравнении не равен даже самому себе.
Проверка типов чисел
Для проверки, является ли значение числом, используются функции:
- Number.isNaN() - проверка на NaN..
- Number.isFinite() - проверка на конечное число
- typeof - возвращает "number" для всех типов Number.
Эти функции помогают корректно определить тип числового значения в JavaScript.
Методы объекта Number
Объект Number в JavaScript содержит удобные методы для работы с числами:
Методы форматирования
- toFixed() - округление до указанного количества знаков после запятой;
- toExponential() - представление числа в экспоненциальной форме;
- toPrecision() - округление до указанной точности.
Эти методы удобно использовать при выводе чисел, например:
let n = 12345.6789; n.toFixed(2); // "12345.68" n.toExponential(3); // "1.235e+4" n.toPrecision(5); // "12345"
Методы преобразования
Также есть методы:
- toString() - преобразование в строку;
- valueOf() - преобразование в примитив.
Они реализуют стандартное JavaScript-преобразование, аналогично для других типов данных.
Для математических операций лучше использовать методы объекта Math, а не Number:
Math.round() // округление Math.pow() // возведение в степень
Такой подход оптимальнее по производительности.
Свойства объекта Number
Помимо методов, объект Number содержит полезные свойства для работы с числами в JS.
Константы диапазона чисел
Ранее упомянутые свойства MAX_VALUE и MIN_VALUE задают границы для всех чисел с плавающей точкой. Для безопасной работы с целыми числами есть два дополнительных свойства:
- Number.MAX_SAFE_INTEGER - максимальное целое число, с которым гарантированно безопасные вычисления.
- Number.MIN_SAFE_INTEGER - минимальное "безопасное" целое число.
Целые числа за пределами этого диапазона могут давать странные результаты из-за особенностей хранения в памяти.
Константы систем счисления
Есть константы, соответствующие различным системам счисления:
- Number.MAX_VALUE - максимальное значение.
- Number.MIN_VALUE - минимальное значение.
- Number.NaN - константа NaN.
- Number.NEGATIVE_INFINITY - константа -Infinity.
- Number.POSITIVE_INFINITY - константа Infinity.
Эти константы удобно использовать для сравнения со специальными числовыми значениями.
Преобразование в числа
В JavaScript существует несколько способов преобразования других типов данных в числа:
- Конструктор Number().
- Функции parseInt(), parseFloat().
- Унарный плюс +.
Number и parseInt/parseFloat
Number() преобразует любые типы данных в число. parseInt()/parseFloat() работают только со строками и имеют более строгие правила разбора.
Например:
Number("123.45") = 123.45 parseInt("123.45") = 123 parseFloat("123.45") = 123.45
Поэтому при работе со строками лучше использовать parseInt()/parseFloat().
Особенности преобразования
Преобразование в число происходит по следующим правилам:
- Логические значения: true -> 1, false -> 0.
- Строка: разбирается как число или NaN, если не получается.
- Null: 0.
- Undefined: NaN.
Знание этих правил помогает понимать результаты преобразований.