Число (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() | Возвращает примитивное значение числа |