JavaScript Номера
JavaScript имеет только один тип чисел. Числа могут быть записаны с десятичными знаками или без них.
Пример
var x = 3.14; // A number with decimals
var y = 3; // A number without decimals
Очень большие или дополнительные малые числа могут быть написаны с помощью научной (экспоненты) нотации:
Пример
var x = 123e5; // 12300000
var y = 123e-5; // 0.00123
Номера JavaScript всегда 64-бит с плавающей запятой
В отличие от многих других языков программирования, JavaScript не определяет различные типы чисел, такие как целые числа, короткие, длинные, плавающие точки и т.д.
Номера JavaScript всегда хранятся в виде чисел с плавающей запятой двойной точности, следуя международному стандарту IEEE 754.
Этот формат хранит числа в 64 бит, где число (фракция) хранится в битах 0 до 51, экспонента в битах 52 до 62 и знак в бит 63:
Value (aka Fraction/Mantissa) | Exponent | Sign |
---|---|---|
52 bits (0 - 51) | 11 bits (52 - 62) | 1 bit (63) |
Точность
Целые числа (цифры без обозначения периода или экспоненты) являются точными до 15 цифр.
Пример
var x = 999999999999999; // x will be 999999999999999
var y = 9999999999999999; // y will be 10000000000000000
Максимальное число десятичных знаков — 17, но Арифметика с плавающей запятой не всегда 100% точна:
Пример
var x = 0.2 + 0.1; // x will be 0.30000000000000004
Чтобы решить проблему выше, она помогает умножить и разделить:
Пример
var x = (0.2 * 10 + 0.1 * 10) / 10; // x will be 0.3
Добавление чисел и строк
Предупреждение!!
JavaScript использует оператор + для сложения и сцепления.
Номера добавляются. Строки объединяются.
Если вы добавите два числа, результатом будет число:
Пример
var x = 10;
var y = 20;
var z = x + y; // z will be 30 (a number)
Если добавить две строки, результатом будет объединение строк:
Пример
var x = "10";
var y = "20";
var z = x + y; // z will be 1020 (a string)
Если добавить число и строку, результатом будет объединение строк:
Пример
var x = 10;
var y = "20";
var z = x + y; // z will be 1020 (a string)
Если добавить строку и число, результатом будет объединение строк:
Пример
var x = "10";
var y = 20;
var z = x + y; // z will be 1020 (a string)
Распространенной ошибкой является ожидать, что этот результат будет 30:
Пример
var x = 10;
var y = 20;
var z = "The result is: " + x + y;
Распространенной ошибкой является ожидать, что этот результат будет 102030:
Пример
var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;
Компилятор JavaScript работает слева направо.
Первые 10 + 20 добавляется, потому что x и y оба числа.
Затем выполняется сцепление 30 + "30", поскольку z является строкой.
Числовые строки
Строки JavaScript могут иметь числовое содержание:
var x = 100; // x is a number
var y = "100"; // y is a
string
JavaScript будет пытаться преобразовать строки в числа во всех числовых операциях:
Это будет работать:
var x = "100";
var y = "10";
var z = x / y; // z will be 10
Это также будет работать:
var x = "100";
var y = "10";
var z = x * y; // z will be 1000
И это будет работать:
var x = "100";
var y = "10";
var z = x - y; // z will be 90
Но это не будет работать:
var x = "100";
var y = "10";
var z = x + y; // z will not be 110 (It will be 10010)
В последнем примере JavaScript использует оператор + для сцепления строк.
NaN-не число
NaN — это зарезервированное слово JavaScript, указывающее, что номер не является юридическим номером.
Попытка выполнить арифметические действия с нечисловой строкой приведет к NaN (не числу):
Пример
var x = 100 / "Apple";
// x will be NaN (Not a Number)
Однако если строка содержит числовое значение, результатом будет число:
Пример
var x = 100 / "10";
// x will be 10
Можно использовать глобальную функцию JavaScript isNaN (), чтобы выяснить, является ли значение числом:
Пример
var x = 100 / "Apple";
isNaN(x); // returns true because x is Not a Number
Следите за НАН. Если вы используете NaN в математической операции, результатом будет также NaN:
Пример
var x = NaN;
var y = 5;
var z = x + y;
// z will be NaN
Или результат может быть сцепление:
Пример
var x = NaN;
var y = "5";
var z = x + y; // z will be NaN5
NaN — число: typeof NaN возвращает число:
Пример
typeof NaN; // returns "number"
Бесконечности
Бесконечность (или-Infinity) — это значение, возвращаемое JavaScript, если вычисляется число за пределами наибольшего возможного числа.
Пример
var
myNumber = 2;
while (myNumber != Infinity) { // Execute until Infinity
myNumber = myNumber * myNumber;
}
Деление на 0 (ноль) также генерирует бесконечность:
Пример
var x = 2 / 0;
// x will be Infinity
var y = -2 / 0;
// y will be -Infinity
Бесконечность-это число: typeof Infinity возвращает число.
Пример
typeof Infinity; // returns "number"
Шестнадцатеричное
JavaScript интерпретирует числовые константы как шестнадцатеричные, если им предшествует 0 x.
Пример
var x = 0xFF; // x will be 255
Никогда не записывайте число с ведущим нулем (например, 07).
Некоторые версии JavaScript интерпретируют числа как восьмеричной, если они написаны с ведущим нулем.
По умолчанию JavaScript отображает числа в виде базовых 10 десятичных знаков.
Но можно использовать метод ToString () для вывода чисел из базы 2 в базовый 36.
Шестнадцатеричное основание 16. Десятичное число является базовым 10. Восьмеричной является базой 8. Двоичный файл является базовым 2.
Пример
var myNumber = 32;
myNumber.toString(10); // returns 32
myNumber.toString(32); // returns
10
myNumber.toString(16); // returns 20
myNumber.toString(8); // returns 40
myNumber.toString(2); // returns 100000
Числа могут быть объектами
Обычно номера JavaScript являются примитивными значениями, созданными из литералов:
var x = 123;
Но числа также могут быть определены как объекты с ключевым словом new:
var y = новый номер (123);
Пример
var x = 123;
var y = new Number(123);
//
typeof x returns number
//
typeof y returns object
Не создавайте числовые объекты.
Это замедляет скорость выполнения.
Ключевое слово New усложняет код. Это может привести к неожиданным результатам:
При использовании оператора = = равные числа равны:
Пример
var x = 500;
var y = new Number(500);
// (x == y) is true because x and y have equal values
При использовании оператора = = = равные числа не равны, поскольку оператор = = = ожидает равенства в типе и значении.
Пример
var x = 500;
var y = new Number(500);
// (x === y) is false because x and y have different types
Или даже хуже. Невозможно сравнить объекты:
Пример
var x = new Number(500);
var y = new Number(500);
// (x == y) is false because objects cannot be compared
Обратите внимание на разницу между (x = = y) и (x = = y).
Сравнение двух объектов JavaScript всегда будет возвращать false.