Числовое значение состоит из любой последовательности числовых символов, например:
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()
?
Каков результат следующей математической операции?
"Six" * 3