Числа

Числовое значение состоит из любой последовательности числовых символов, например:

5

Числовой тип данных также включает несколько специальных глобальных свойств, которые представляют числовые понятия, такие как Infinity и NaN — значение, означающее «не число», потенциальное результат попытки выполнить математические вычисления над нечисловыми значениями.

Числовой объект

Когда значение передается в функцию Number() , это значение преобразуется в числовой эквивалент. Например, числовая строка приводит к эквивалентному числовому примитиву:

Number( "10" );
> 10

Передача значения false или null в Number() возвращает 0 , а true возвращает 1 .

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

Если значение невозможно преобразовать, как в случае с undefined или строкой, содержащей нечисловые символы, функция Number возвращает NaN :

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

Как подробно описано в разделе «Наследование прототипов» , у вас, скорее всего, практически не будет причин использовать объект Number в качестве конструктора, поскольку он создает объект Number вместо числового литерала.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

Этот объект ведет себя как присвоенное ему значение для математических операций, но он не выполняет строгие сравнения на равенство с числовыми литералами, поскольку типы данных не совпадают, не обеспечивая при этом каких-либо практических преимуществ по сравнению с литеральным значением.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

Плавающие и целые числа

В JavaScript есть только один тип чисел: 64-битные числа с плавающей запятой двойной точности IEEE 754-1985 между -2^1024 и 2^1024 . Прежде чем JavaScript сохранит какое-либо число в памяти, он сначала преобразует это число в двоичное число с плавающей запятой, также называемое числом с плавающей запятой .

Это 64-битное хранилище (один бит положительного или отрицательного знака, 11 бит для экспоненты и 52 бита для дроби) может вызывать ошибки точности при любом количестве цифр, выходящих за пределы допустимого диапазона. Это ограничение присуще числовому типу данных JavaScript.

0.1 + 0.7
> 0.7999999999999999

Вместо этого числовое значение можно сохранить как целое число , число с плавающей запятой без дроби между -(2^53 − 1) и 2^53 − 1 . Поскольку числа с плавающей запятой и целые числа хранятся одним и тем же фундаментальным способом, практической разницы в том, как работают эти числа, нет. Однако мы рекомендуем по возможности использовать целые числа, чтобы избежать ошибок в точности.

Числовые операторы

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

Оператор Имя Описание Использование Результат
+ Добавление 2+2 4
- Вычитание 4-2 2
* Умножение 2*5 10
/ Разделение 10/5 2
++ Приращение Добавляет единицу к числу 2++ 3
-- Декремент Вычитает единицу из числа 3-- 2
** Экспонента Возвращает результат поднятия первого
операнд в степени второго операнда.
2**4 16
% Остаток Возвращает остаток, оставшийся после
первый операнд делится на второй операнд.
12%5 2

Вы также можете использовать математические операторы присваивания, чтобы выполнить математическую операцию над значением переменной и немедленно присвоить это вновь вычисленное значение переменной.

Оператор Имя Использование
+= Дополнительное задание myValue += 2
-= Назначение вычитания myValue -= 2
*= Назначение умножения myValue *= 2
/= Назначение дивизии myValue /= 2
**= Назначение экспоненты myValue **= 2
%= Назначение остатка myValue %= 2

Символические значения

Числовой примитив также применим к нескольким особым случаям: значению «не число» ( NaN ) и значению, представляющему бесконечность, которое может быть либо положительным ( Infinity ), либо отрицательным ( -Infinity ).

Вы можете редко столкнуться с Infinity в результате деления на ноль, в этом случае большинство языков программирования вместо этого выдают ошибку:

10 / 0
> Infinity

Помните, что JavaScript чувствителен к регистру. Infinity — это числовой тип данных, представляющий концепцию бесконечности, но infinity не имеет особого значения:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (что означает « не число ») появляется чаще в тех случаях, когда результат арифметической операции не может быть выражен в виде числа. Например, поскольку JavaScript пытается определить тип данных на основе значения и контекста, в математической операции можно использовать строковый литерал, содержащий только число:

"2" * 2;
> 4

Однако если эту строку невозможно проанализировать как числовое значение, математическая операция приведет к нечисловому значению:

"two" * 2;
> NaN

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

  • Неудачное преобразование чисел (например, parseInt( undefined ) ).
  • Арифметические операции, результат которых не является действительным числом (например, 0 / 0 , Math.sqrt( -10 ) ).
  • Арифметическая операция с неопределенным результатом ( 0 * Infinity )
  • Арифметическая операция, которая включает либо явный результат NaN ( NaN + 2 ), либо результат NaN ( 2 * "string" / 2 ).

Проверьте свое понимание

Каков результат передачи false в Number() ?

НЭН
1
ЛОЖЬ
0

Каков результат следующей математической операции?

"Six" * 3

НЭН
0
2
18
Истинный