Откройте для себя все тонкости числового типа данных JavaScript

В JavaScript числа играют решающую роль в выполнении математических операций и представлении числовых данных. Понимание того, как числа работают в JavaScript, важно для любого программиста.

Числовой тип данных в JavaScript

В JavaScript числа представлены с использованием типа данных Number. Этот тип данных позволяет работать с числами с плавающей запятой, включая целые и десятичные числа. В отличие от некоторых других языков программирования, в JavaScript нет отдельного типа данных для целых чисел.

Чтобы определить число в JavaScript, вы можете просто присвоить числовое значение переменной:

let age = 25;
let pi = 3.14;

Основные операции с числами

JavaScript предоставляет различные операторы для выполнения арифметических операций над числами. К ним относятся сложение (+), вычитание (-), умножение (*) и деление (/). Вот некоторые примеры:

let x = 10;
let y = 5;
let sum = x + y; // 15
let difference = x - y; // 5
let product = x * y; // 50
let quotient = x / y; // 2

Числовые литералы

JavaScript позволяет вам определять числа с помощью литералов. Числовой литерал — это последовательность цифр, представляющая определенное числовое значение. Вот несколько примеров числовых литералов:

let count = 100; // integer literal
let price = 99.99; // floating-point literal
let binaryNumber = 0b1010; // binary literal (0b prefix)
let octalNumber = 0o77; // octal literal (0o prefix)
let hexadecimalNumber = 0xFF; // hexadecimal literal (0x prefix)

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

Свойства номера

Объект Number в JavaScript имеет несколько свойств, предоставляющих полезную информацию о числах. Давайте рассмотрим некоторые из наиболее часто используемых свойств:

  • Number.MAX_VALUE: представляет максимальное положительное значение, которое может быть представлено в JavaScript.
  • Number.MIN_VALUE: представляет наименьшее положительное значение больше нуля, которое может быть представлено.
  • Number.NaN: представляет специальное значение «Не число» (NaN), которое указывает на недопустимую числовую операцию.
  • Number.POSITIVE_INFINITY: представляет положительную бесконечность, которая возникает, когда число превышает верхний предел представляемых значений.
  • Number.NEGATIVE_INFINITY: представляет отрицательную бесконечность, которая возникает, когда число меньше нижнего предела представимых значений.

Вот пример, демонстрирующий использование этих свойств:

console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
console.log(Number.MIN_VALUE); // 5e-324
console.log(Number.NaN); // NaN
console.log(Number.POSITIVE_INFINITY); // Infinity
console.log(Number.NEGATIVE_INFINITY); // -Infinity

Числовые методы

Объект Number в JavaScript предоставляет различные методы, позволяющие выполнять операции и преобразования над числами. Давайте рассмотрим некоторые из наиболее часто используемых методов:

Число.parseInt()

Метод Number.parseInt() используется для анализа строки и преобразования ее в целое число. Он принимает строку в качестве аргумента и возвращает проанализированное целочисленное значение. Вот пример:

let ageString = "25";
let age = Number.parseInt(ageString);
console.log(age); // 25

Число.parseFloat()

Метод Number.parseFloat() похож на Number.parseInt(), но он анализирует строку и преобразует ее в число с плавающей запятой. Вот пример:

let priceString = "99.99";
let price = Number.parseFloat(priceString);
console.log(price); // 99.99

Число.isNaN()

Метод Number.isNaN() используется для определения того, является ли значение NaN (не числом). Он возвращает true, если предоставленное значение равно NaN, и false в противном случае. В отличие от глобальной функции isNaN(), Number.isNaN() не выполняет никакого приведения типов. Вот пример:

console.log(Number.isNaN(10)); // false
console.log(Number.isNaN("hello")); // false
console.log(Number.isNaN(NaN)); // true

Число.isFinite()

Метод Number.isFinite() определяет, является ли значение конечным числом. Он возвращает true, если предоставленное значение является конечным числом, и false для Infinity, -Infinity и NaN. Этот метод не выполняет приведение типов. Вот пример:

console.log(Number.isFinite(10)); // true
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(NaN)); // false

Число.isInteger()

Метод Number.isInteger() проверяет, является ли значение целым числом. Он возвращает true, если значение является целым числом, и false в противном случае. Этот метод не выполняет приведение типов. Вот пример:

console.log(Number.isInteger(10)); // true
console.log(Number.isInteger(10.5)); // false
console.log(Number.isInteger("10")); // false

Номер.прототип.toFixed()

Метод Number.prototype.toFixed() используется для форматирования числа с заданным количеством цифр после запятой. Он возвращает строковое представление числа с указанной точностью.

let pi = Math.PI;
let formattedPi = pi.toFixed(2);
console.log(formattedPi); // "3.14"

В этом примере мы используем toFixed(2) для форматирования значения pi с двумя цифрами после запятой.

Число.прототип.toPrecision()

Метод Number.prototype.toPrecision() используется для форматирования числа до заданной длины, включая как целые, так и десятичные цифры. Он возвращает строковое представление числа с указанной точностью.

let number = 123.456789;
let formattedNumber = number.toPrecision(5);
console.log(formattedNumber); // "123.46"

В этом примере мы используем toPrecision(5) для форматирования number с точностью до 5 цифр.

Number.prototype.toExponential()

Метод Number.prototype.toExponential() используется для форматирования числа с использованием экспоненциальной записи. Он возвращает строковое представление числа в экспоненциальной форме.

let value = 1000000;
let formattedValue = value.toExponential();
console.log(formattedValue); // "1e+6"

Метод toExponential() позволяет более лаконично представлять большие и малые числа в экспоненциальном представлении.

Число.isSafeInteger()

Метод Number.isSafeInteger() используется для определения того, находится ли заданное число в диапазоне безопасных целочисленных значений. Он возвращает true, если число безопасно, и false в противном случае.

console.log(Number.isSafeInteger(42)); // true
console.log(Number.isSafeInteger(9007199254740992)); // false

В приведенном выше примере первый вызов Number.isSafeInteger() возвращает true, поскольку 42 находится в диапазоне безопасных целых чисел. Второй вызов возвращает false, так как 9007199254740992 превышает безопасный целочисленный диапазон.

Безопасный целочисленный диапазон

JavaScript имеет определенный диапазон, в котором целые числа могут быть представлены безопасно и точно. Безопасный диапазон целых чисел определяется константами Number.MAX_SAFE_INTEGER и Number.MIN_SAFE_INTEGER. Любое целое число в этом диапазоне может быть сохранено и обработано без потери точности.

console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991

Важно отметить, что значения за пределами этого безопасного целочисленного диапазона могут быть представлены неточно из-за базового числового представления JavaScript.

Округление чисел и точность

JavaScript использует формат с плавающей запятой IEEE 754 для представления чисел, что может привести к ошибкам округления при выполнении определенных вычислений. Для учета этих ошибок JavaScript предоставляет свойство Number.EPSILON, которое представляет наименьшую разницу между двумя представимыми числами.

console.log(0.1 + 0.2 === 0.3); // false
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON); // true

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

Двоичные литералы

Для представления двоичных чисел в JavaScript вы можете использовать префикс 0b, за которым следует последовательность двоичных цифр (0 и 1). Это обеспечивает более интуитивное и явное представление двоичных значений.

let binaryNumber = 0b1010; // Binary representation of 10
console.log(binaryNumber); // 10

Использование префикса 0b указывает на то, что значение является двоичным числом, что повышает читаемость кода и уменьшает неоднозначность.

Восьмеричные литералы

Точно так же JavaScript теперь поддерживает представление восьмеричного числа с использованием префикса 0o, за которым следует последовательность восьмеричных цифр (от 0 до 7). Это упрощает представление восьмеричных значений в коде.

let octalNumber = 0o77; // Octal representation of 63
console.log(octalNumber); // 63

Используя префикс 0o, разработчики могут явно указывать восьмеричные значения, повышая ясность кода.

Заключение

В этом всеобъемлющем обзоре мы рассмотрели тип данных JavaScript Number и его различные функции. Понимание того, как JavaScript обрабатывает числа, имеет основополагающее значение для выполнения математических операций и эффективного управления числовыми данными в ваших программах JavaScript.

Спасибо, что дочитали до этого момента! Если вы еще не являетесь участником Medium, подумайте о том, чтобы поддержать меня. Таким образом, у вас будет неограниченный доступ ко всему контенту на Medium, а я также получу небольшую комиссию.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу