Меню

JavaScript: Infinity и NaN

Infinity

В JavaScript имеется предопределённая глобальная переменная Infinity. Она хранит специальное значение обозначающее бесконечность – Infinity. Эта переменная доступна только для чтения.

Значение Infinity можно получить:

  • В результате деления числа на 0.
  • Если результат вычислений, не попадает в допустимый диапазон чисел JavaScript. Любое отрицательное число, которое не может быть представлено, считается отрицательной бесконечностью (-Infinity), а положительное – положительной бесконечностью (Infinity).

alert(123 / 0);     // Infinity
alert(-12345 / 0);  // -Infinity
alert(1e500);       // Infinity
alert(1 - 1e500);   // -Infinity
Попробовать »

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


alert(20 + Infinity);   // Infinity

NaN

Также, в JavaScript имеется предопределённая глобальная переменная NaN. Она хранит специальное значение NaN (NaN сокращение от англ. Not a Number – не число). Эта переменная доступна только для чтения.

Значение NaN используется для обозначения математической ошибки, которая возникает в том случае, если математическая операция не может быть совершена:


var a = 10, b = "текст";

document.write(a - b);  // Операнд не может быть преобразован в число
document.write(0 / 0);  // Деление нуля на нуль
Попробовать »

Значение NaN обладает одной особенностью: оно не равно никакому значению, в том числе и другому NaN:


NaN == NaN   // false

Чтобы определить, является ли значение переменной значением NaN следует выполнить проверку на неравенство x != x. Эта проверка вернёт true тогда и только тогда, когда x имеет значение NaN:


var x = NaN;

alert(x != x);   // true

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


var num = NaN / 10;   // NaN