Присоединяйтесь к новому бесплатному курсу по Angular: "Список пользователей"
Курс проходит в мессенджере (Telegram, Viber). В конце курса - сессия живого разбора кода. Регистрация по ссылке.

Число (Number)

Число (Number)

В JavaScript есть только один тип числа.
Числа могут быть записаны с запятыми или без них:

var a = 3.14;  
var b = 3; 

Очень большие или очень маленькие числа могут быть записаны в “научном формате” (ещё говорят “запись с плавающей точкой” или “экспоненциальная запись”)

var a = 2e5;    // 200000
var b = 2e-5;   // 0.00002

JavaScript числа всегда содержат 64-разрядную плавающую точку

В отличие от многих других языков программирования, JavaScript не определяет разные типы чисел, такие как integer, short, long, floating-point и т. д.

JavaScript числа всегда хранятся в виде чисел с плавающей точкой двойной точности (double precision), следуя международному стандарту IEEE 754.

Этот формат хранит числа в 64 битах, где число (фракция) хранится в битах от 0 до 51, показатель в битах 52-62 и знаковый бит 63:

Значение (Фракция / Мантисса)   Экспонента Знак
52 бит (0 — 51) 11 бит (52 — 62) 1 бит (63)

 

Точность

Целые числа (без указания периода) точны до 15 цифр.

var x = 999999999999999; // 999999999999999
var y = 9999999999999999; // 10000000000000000

Максимальное количество знаков после запятой составляет 17, но арифметика с плавающей точкой не всегда 100% точна:

var sum = 0.2 + 0.1; // 0.30000000000000004

Решить проблему выше, поможет умножение и деление:

var sum = (0.2 * 10 + 0.1 * 10) / 10; // 0.3

Добавление чисел и строк

ВНИМАНИЕ !!!
JavaScript использует оператор “ + ” для сложения и конкатенации.
Числа — суммируются. Строки — объединяются (конкатенируются).

При добавлении двух чисел, результатом будет число:

var a = 10;
var b = 25;
var result = a + b; // 35 (число)

При добавлении двух строк, результатом будет конкатенация строк:

var a = "10";
var b = "25";
var result = a + b; // 1025 (строка)

При добавлении строки и числа, результатом будет конкатенация строк:

var a = "10";
var b = 25;
var result = a + b; // 1025 (строка)

Распространенная ошибка ожидать, что результатом будет 35:

var a = 10;
var b = 25;
var result = "Результат: " + a + b; 

Демо

Распространенная ошибка ожидать, что результатом будет 102540:

var a = 10;
var b = 25;
var с = "40";
var result = a + b + с;

Демо

Компилятор JavaScript работает слева направо.
Сначала добавляются 10 + 25 , потому что a и b — оба числа.
Тогда 35 + “40” конкатенируются, потому что c является строкой.
Результатом будет строка 3540

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

Строки JavaScript могут иметь числовое содержимое:

var a = 25; // число
var b = "5"; // строка

JavaScript попытается преобразовать строки в числа во всех числовых операциях.

Это будет работать:

var a = "25";
var b = "5";
var result = a / b; // 5

Это также будет работать:

var a = "25";
var b = "5";
var result = a * b; // 125

Это также будет работать:

var a = "25";
var b = "5";
var result = a - b; // 20

Но это не сработает:

var a = "25";
var b = "5";
var result = a + b; // 255 (JavaScript применить оператор "+" для конкатенации строк)

NaN — Not a Number

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

var a = 25 / "Banana"; // NaN

Однако, если строка содержит числовое значение, результатом будет число:

var a = 100 / "10"; // 10

При использовании NaN в математической операции, результатом будет также NaN:

var a = NaN;
var b = 5;
var result = a + b; // NaN

Или результат может быть конкатенацией:

var a = NaN;
var b = "5";
var result = a + b; // NaN5

NaN — число: typeof NaN возвращает number:

typeof NaN; // number

Infinity

Infinity (или -Infinity) — это значение, которое JavaScript вернет, если вы вычислите число за пределами максимально возможного числа.

var number = 5; 
var text = "";
while (number != Infinity) {
   number = number * number;
}

Демо

Результатом деления на 0 (ноль) также будет Infinity:

var a =  5 / 0; // Infinity
var b = -5 / 0; // -Infinity

Infinity — это число: typeof Infinity возвращает число.

typeof Infinity; // number

Шестнадцатеричные

JavaScript интерпретирует числовые константы как шестнадцатеричные, если им предшествует 0x.

var a = 0xCC; // 204

Не следует писать число с ведущим нулем (например, 05).
Некоторые версии JavaScript интерпретируют такие числа как восьмеричные.

По умолчанию JavaScript отображает числа на основе десятичной системы счисления.
Но вы можете использовать метод toString() для вывода чисел и с помощью других систем счисления: 16 (шестнадцатеричной), base 8 (восьмеричной) или 2 (двоичной).

var number = 128;
number.toString(16);  // 80
number.toString(8);   // 200
number.toString(2);   // 10000000

Числа могут быть объектами

Обычно JavaScript числа являются примитивными значениями, созданными из литералов:

var a = 12;

Но числа также могут быть определены как объекты с помощью ключевого слова new:

var b = new Number(12);

Не создавайте объекты Number. Это замедляет скорость выполнения.
Ключевое слово new усложняет код и может привести к неожиданным результатам:

При использовании оператора “==” равные числа — равны:

var a = 25;             
var b = new Number(25);
// (a == b) вернет true 

При использовании оператора “===” равные числа не равны, потому что оператор “===” ожидает равенства как по типу, так и по значению.

var a = 25;             
var b = new Number(25);
// (a === b) вернет false

Или еще хуже. Объекты нельзя сравнивать:

var a = new Number(25);             
var b = new Number(25);
// (a == b) вернет false

Обратите внимание на разницу между (a == b) и (a === b).
Сравнение двух объектов JavaScript всегда будет возвращать false.

Свойства чисел

Свойство Описание
constructor Возвращает функцию, которая создает прототип JavaScript числа
MAX_VALUE Возвращает самое большое число из возможных в JavaScript
MIN_VALUE Возвращает наименьшее из возможных чисел в JavaScript
NEGATIVE_INFINITY Представляет отрицательное значение infinity
NaN Представляет значение “Not-a-Number”
POSITIVE_INFINITY Представляет значение infinity
prototype Позволяет добавлять свойства и методы к объекту

Методы чисел

Метод Описание
isFinite() Проверяет, является ли значение конечным числом
isInteger() Проверяет, является ли значение целым числом
isNaN() Проверяет, является ли значение Number.NaN
isSafeInteger() Проверяет, является ли значение безопасным целым числом
toExponential(x) Преобразует число в экспоненциальную нотацию
toFixed(x) Форматирует число с Х количеством цифр после запятой
toPrecision(x) Форматирует число до Х длины
toString() Преобразует число в строку
valueOf() Возвращает примитивное значение числа