Числа JavaScript
- Предыдущая страница JS строковые шаблоны
- Следующая страница JS BigInt
В JavaScript есть только один тип числовых значений.
При записи числовых значений можно использовать или не использовать точку после запятой.
JavaScript числовые значения
Значения в JavaScript можно записывать как с точкой, так и без нее:
Пример
var x = 3.14; // Значение с точкой var y = 3; // Значение без точки
Очень большие или очень малые числа можно записать с помощью научной записи:
Пример
var x = 123e5; // 12300000 var y = 123e-5; // 0.00123
Значения в JavaScript всегда 64-битные числа с плавающей запятой
В отличие от многих других языков программирования, JavaScript не определяет различных типов чисел, таких как целые, короткие, длинные, плавающие и т.д.
Значения в JavaScript всегда хранятся в виде двойной точности с плавающей запятой, согласно международному стандарту IEEE 754.
Этот формат использует 64 бита для хранения значения, где 0 до 51 бит хранят цифры (фрагменты), 52 до 62 бит хранят индекс, 63 бит хранят знак:
Значение (тоже известное как Номинал) | Индекс | Знак |
---|---|---|
52 бита (0 - 51) | 11 бит (52 - 62) | 1 бит (63) |
Точность
Целые числа (без использования индексов или научной записи) точны до 15 знаков.
Пример
var x = 999999999999999; // x будет 999999999999999 var y = 9999999999999999; // y будет 10000000000000000
Максимальное количество знаков после запятой для чисел - 17, но арифметика с плавающей запятой не всегда точна на 100%:
Пример
var x = 0.2 + 0.1; // x будет 0.30000000000000004
Использование умножения и деления поможет решить эту проблему:
Пример
var x = (0.2 * 10 + 0.1 * 10) / 10; // x будет 0.3
Сложение числа и строки
Внимание!!
Сложение и конкатенация в JavaScript оба используют оператор +.
Числа сложение. Строки конкатенация.
Если сложить два числа, результат будет числом:
Пример
var x = 10; var y = 20; var z = x + y; // z будет 30 (число)
Если сложить две строки, результат будет их串联:
Пример
var x = "10"; var y = "20"; var z = x + y; // z будет 1020 (строка)
Если вы сложите число и строку, результат будет строкой:
Пример
var x = 10; var y = "20"; var z = x + y; // z будет 1020 (строка)
Если вы добавляете строку и число, результат также будет каскадированием строк:
Пример
var x = "10"; var y = 20; var z = x + y; // z будет 1020 (строка)
Частая ошибка - это думать, что результат должен быть 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 выполняет компиляцию слева направо.
Потому что x и y оба являются числами, 10 + 20 будут сложены.
Потому что z является строкой, 30 + "30" будет каскадироваться.
числовая строка
Строки JavaScript могут содержать числовое содержимое:
var x = 100; // x является числом var y = "100"; // y является строкой
В всех числовых операциях JavaScript пытается преобразовать строки в числа:
Этот пример работает так:
var x = "100"; var y = "10"; var z = x / y; // z будет 10
Этот пример также будет работать так:
var x = "100"; var y = "10"; var z = x * y; // z будет 1000
Этот пример работает так:
var x = "100"; var y = "10"; var z = x - y; // z будет 90
Но этот пример не будет работать так, как в предыдущем примере:
var x = "100"; var y = "10"; var z = x + y; // z не будет 110 (а 10010)
В последнем примере JavaScript использовал оператор + для каскадирования строк.
NaN - нечисловое
NaN
является ключевым словом JavaScript, указывает на то, что某数不是合法ное число。
Попытка выполнения деления с использованием нечислового строки приведет к NaN (Not a Number):
Пример
var x = 100 / "Apple"; // x будет NaN (Not a Number)
Но если строка содержит числовые значения, результат будет числом:
Пример
var x = 100 / "10"; // x будет 10
Вы можете использовать глобальную функцию JavaScript isNaN()
来确定某个值是否是数:
Пример
var x = 100 / "Apple"; isNaN(x); // Возвращает true, потому что x не является числом
требуется быть внимательным NaN
.Будьте осторожны, если вы используете NaN
в результате также будет NaN
:
Пример
var x = NaN; var y = 5; var z = x + y; // z будет NaN
результат может быть объединен:
Пример
var x = NaN; var y = "5"; var z = x + y; // z будет NaN5
NaN
является числом,typeof NaN
возвращает number
:
Пример
typeof NaN; // Возвращает "number"
Infinity
Infinity
(или -Infinity
является значением, которое JavaScript возвращает при вычислении числа, когда оно выходит за пределы возможного диапазона значений.
Пример
var myNumber = 2; while (myNumber != Infinity) { // Выполняется до Infinity myNumber = myNumber * myNumber; }
деление на 0 (ноль) также генерирует Infinity
:
Пример
var x = 2 / 0; // x будет Infinity var y = -2 / 0; // y будет -Infinity
Infinity
является числом:typeOf Infinity
возвращает number
.
Пример
typeof Infinity; // Возвращает "number"
шестнадцатеричные
JavaScript интерпретирует префикс 0x
значения числовых констант объясняются шестнадцатеричными.
Пример
var x = 0xFF; // x будет 255.
Никогда не пишите числа с префиксом нуля (например, 07).
Некоторые версии JavaScript интерпретируют числа с префиксом нуля как восьмеричные.
По умолчанию, Javascript отображает числа в десятичной дробной форме.
Но вы можете использовать toString()
Метод выводит число в шестнадцатеричном, восьмеричном или двоичном формате.
Пример
var myNumber = 128; myNumber.toString(16); // Возвращает 80 myNumber.toString(8); // Возвращает 200 myNumber.toString(2); // Возвращает 10000000
Числа могут быть объектами
Обычно значения JavaScript чисел создаются литералами: var x = 123
Но также можно использовать ключевое слово new
Определено как объект: var y = new Number(123)
Пример
var x = 123; var y = new Number(123); // typeof x возвращает number // typeof y возвращает object
Не создавайте числовые объекты. Это может замедлить выполнение.
new
Ключевые слова усложняют код и могут привести к непредсказуемым результатам:
Когда вы используете ==
Когда вы используете оператор ==, равные числа кажутся равными:
Пример
var x = 500; var y = new Number(500); // (x == y) возвращает true, потому что x и y имеют равные значения
Когда вы используете ===
После использования оператора == равные числа становятся неравными, потому что ===
Операторы требуют, чтобы тип и значение были одинаковыми.
Пример
var x = 500; var y = new Number(500); // (x === y) возвращает false, потому что типы x и y различаются
Даже хуже. Объекты не могут быть сравнены:
Пример
var x = new Number(500); var y = new Number(500); // (x == y) возвращает false, потому что объекты не могут быть сравнены
Объекты JavaScript не могут быть сравнены.
- Предыдущая страница JS строковые шаблоны
- Следующая страница JS BigInt