JavaScript. Подробное руководство, 6-е издание (Флэнаган) - страница 33

. Значение >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.

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