Числа в JavaScript: Погружение в основы и необычные особенности

dall e 2024 08 09 12.55.13 a vibrant and detailed illustration showcasing the various ways numbers can be represented in javascript. the image should include examples of decimal HTML

Числа (Number) — один из базовых типов данных в JavaScript. В других языках программирования этот тип часто называется double или float64. Подобно другим языкам, JavaScript имеет свои пределы для минимальных и максимальных значений чисел:

const maxInt = Number.MAX_SAFE_INTEGER; // 9007199254740991
const minInt = Number.MIN_SAFE_INTEGER; // -9007199254740991

minInt === -maxInt; // true

const maxDouble = Number.MAX_VALUE; // 1.7976931348623157e+308
const minDouble = Number.MIN_VALUE; // 5e-324

Экспоненциальное представление чисел

В JavaScript числа могут быть представлены с использованием основания и экспоненты (beN):

const minusTwo = -2e0; // -2
const one75 = 175e-2; // 1.75

В этом формате число состоит из основания и экспоненты, где e указывает, насколько следует сместить десятичную точку. Если число после e положительное — добавляются нули, если отрицательное — точка смещается влево:

const zero = 0e0; // 0; смещает точку относительно 0.0 на 0 позиций
const zero5 = 5e-1; // 0.5; смещает точку относительно 5.0 на одну позицию влево
const fifty = 5e1; // 50; смещает точку относительно 5.0 на одну позицию вправо
const alsoFifty = 5e+1; // 50; аналогично, смещение вправо на одну позицию
const minusFifty = -5e+1; // -50; смещает точку относительно -5.0 на одну позицию вправо
const seventeen5 = 1.75e1; // 17.5; смещение вправо на одну позицию

Использование разделителей в числах

Для улучшения читаемости чисел можно использовать знак нижнего подчеркивания в качестве разделителя:

const million = 1_000_000; // 1000000
const fiveK = 5_000; // 5000
const neatNumber = 1_2_3.3_2_1; // 123.321

const oops = 1__0; // Ошибка: только один знак подчеркивания допустим в качестве разделителя
const nope = 0_1; // Ошибка: разделитель не может стоять после ведущего ноля

Двоичная, восьмеричная и шестнадцатеричная системы

В JavaScript легко работать с различными системами счисления:

  • Двоичная система:
const five = 0b101; // 5
const alsoFive = 0B101; // 5; `b` нечувствителен к регистру
const max8bit = 0b1111_1111; // 255
const lessFive = -0b0101; // -5
  • Шестнадцатеричная система:
const max8bit = 0xff; // 255
const hexNum = -0xabc; // -2748
const max32bit = 0xffff_ffff; // 4294967295
  • Восьмеричная система:
const maxBit = 0o7; // 7
const eight = 0o10; // 8
const funnyZero = 0O0; // 0

BigInt: работа с большими числами

, добавив суффBigIntКогда целое число не помещается в 64 бита, его можно преобразовать в n:

const bigInt = 1234567890123456789012345678901234567890n; // Очень большое число
const bigTen = 10n; // 10n
const bigLess50 = -50n; // -50n

Специальные значения и NaN

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

Infinity === Number.POSITIVE_INFINITY; // true
-Infinity === Number.NEGATIVE_INFINITY; // true
const smallestFraction = Number.EPSILON; // 2.220446049250313e-16
smallestFraction === Math.pow(2, -52); // true

Кроме того, существует значение NaN (Not a Number), которое представляет собой результат неудачного вычисления:

NaN === Number.NaN; // false !!
Number.isNaN(NaN); // true

NaN + 1; // NaN
NaN * 15; // NaN
NaN / NaN; // NaN
1 * NaN; // NaN

NaN часто возникает из-за неверного приведения типов:

parseInt('abc'); // NaN
parseFloat('1.1.1'); // NaN
'abc' * 1; // NaN
new Number('abc'); // Number {NaN}

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

Number.isNaN('abc'); // false
Number.isFinite(123); // true
Number.isInteger(123); // true
Number.isSafeInteger(9007199254740992); // false

BigInt не является числом Number, поэтому для него эти проверки не применимы:

Number.isInteger(1n); // false
Number.isSafeInteger(1n); // false

Заключение

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

Оцените статью