. Значение
>NaN
возвращается также при попытке разделить бесконечность на бесконечность, извлечь квадратный корень из отрицательного числа или выполнить арифметическую операцию с нечисловыми операндами, которые не могут быть преобразованы в числа.
В JavaScript имеются предопределенные глобальные переменные >Infinity
и >NaN
, хранящие значения положительной бесконечности и «не число». В стандарте ECMAScript 3 эти переменные доступны для чтения/записи и могут изменяться в программах. Стандарт ECMAScript 5 исправляет эту оплошность и требует, чтобы эти переменные были доступны только для чтения. Объект Number предоставляет альтернативные представления некоторых значений, доступные только для чтения даже в ECMAScript 3. Например:
>Infinity // Переменная, доступная для чтения/записи,
> // инициализированная значением Infinity.
>Number.POSITIVE_INFINITY // То же значение, доступное только для чтения.
>1/0 // То же самое значение.
>Number.MAX_VALUE + 1 // Это выражение также возвращает Infinity.
>Number.NEGATIVE_INFINITY // Возвращают отрицательную бесконечность.
>-Infinity
>-1/0
>-Number.MAX_VALUE - 1
>NaN // Переменная, доступная для чтения/записи,
> // инициализированная значением NaN.
>Number.NaN // Свойство, доступное только для чтения, с тем же значением.
>0/0 // Возвращает NaN.
>Number.MIN_VALUE/2 // Потеря значащих разрядов: возвращает 0
>-Number.MIN_VALUE/2 // Отрицательный ноль
>-1/Infinity // Также отрицательный ноль
>-0
Значение «не число» в JavaScript обладает одной необычной особенностью: операция проверки на равенство всегда возвращает отрицательный результат, даже если сравнить его с самим собой. Это означает, что нельзя использовать проверку >х == NaN
, чтобы определить, является значение переменной >х
значением >NaN
. Вместо этого следует выполнять проверку>х != х
. Эта проверка вернет >true
тогда и только тогда, когда >х
имеет значение >NaN
. Аналогичную проверку можно выполнить с помощью функции >isNaN()
. Она возвращает >true
, если аргумент имеет значение >NaN
или если аргумент является нечисловым значением, таким как строка или объект. Родственная функция >isFinite()
возвращает >true
, если аргумент является числом, отличным от >NaN
, >Infinity
или >-Infinity
.
Отрицательный ноль также имеет свои характерные особенности. В операциях сравнения (даже в операции строгой проверки на равенство) он признается равным положительному нулю, что делает эти два значения практически неотличимыми, за исключением случаев, когда они выступают в роли делителей: