Бесконечность и значение NaN

Деление числа на 0 приведет к значению плюс или минус Infinity (бесконечность), а деление числа 0.0 на 0 — к значению NaN (нет числа):

console.log(  10 / 0 );                // Infinity
console.log( -10 / 0 );                // -Infinity
console.log(   0 / 0 );                // NaN

Присвоить эти значения можно также с помощью глобальных свойств Infinity и NaN или свойств POSITIVE_INFINITY, NEGATIVE_INFINITY и NaN из класса Number:

console.log( Infinity );               // Infinity
console.log( -Infinity );              // -Infinity
console.log( NaN );                    // NaN
console.log(Number.POSITIVE_INFINITY); // Infinity
console.log(Number.NEGATIVE_INFINITY); // -Infinity
console.log(Number.NaN);               // NaN

Любая операция значения Infinity с числом даст в результате Infinity:

console.log( Infinity - 5 );           // Infinity

Любая операция со значением NaN даст в результате NaN:

console.log( NaN + 5 );                // NaN

При сравнении значение NaN не равно даже самому себе:

console.log( NaN == NaN );             // false
console.log( NaN === NaN );            // false

Для проверки соответствия этим значениям следует воспользоваться следующими глобальными функциями:

  • isFinite(<Значение>) — возвращает true, если значение не равно плюс или минус бесконечность или значению NaN, и false в противном случае;
  • isNaN(<Значение>) — возвращает true, если значение равно NaN, и false в противном случае. Пример:
let x = 10.0 / 0, y = 0.0 / 0, z = 5;
console.log( x + ' ' + y + ' ' + z ); // Infinity NaN 5
console.log( Number.isNaN(x) );       // false
console.log( Number.isNaN(y) );       // true
console.log( Number.isNaN(z) );       // false
 
console.log( Number.isFinite(x) );    // false
console.log( Number.isFinite(y) );    // false
console.log( Number.isFinite(z) );    // true

Выполнить сравнение со значением NaN позволяет также статический метод is(<Значение 1>, <Значение 2>) из класса Object:

console.log( Object.is(x, NaN) );     // false
console.log( Object.is(y, NaN) );     // true
console.log( Object.is(z, NaN) );     // false

Можно также воспользоваться статическими методами isFinite() и isNaN() из класса Number (см. разд. 5.2):

let x = 10.0 / 0, y = 0.0 / 0, z = 5;
console.log( Number.isNaN(y) );       // true
console.log( Number.isFinite(x) );    // false
console.log( Number.isFinite(z) );    // true

Обратите внимание: в отличие от глобальных функций isFinite() и isNaN(), методы isFinite() и isNaN() из класса Number автоматически не преобразует указанное значение в число:

console.log( Number.isFinite('0') );  // false
console.log( isFinite('0') );         // true
console.log( Number.isNaN('str') );   // false
console.log( isNaN('str') );          // true

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов