2011-01-18 3 views

ответ

149
if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY) 
{ 
    // ... 
} 

Вы могли бы использовать функцию isFinite вместо этого, в зависимости от того, как вы хотите, чтобы лечить NaN. isFinite возвращает false, если ваш номер POSITIVE_INFINITY, NEGATIVE_INFINITY или NaN.

if (isFinite(result)) 
{ 
    // ... 
} 
+1

Perfect - спасибо! Гомер. –

+2

Зачем использовать 'Number (ПОЗИТИВНО | НЕГАТИВНО) _INFINITY' вместо' -? Infinity' или '-? 1/0'? –

+3

@Eli: глобальное свойство 'Infinity' не доступно для чтения, что означает, что его можно переопределить: например,' var x = 42; Бесконечность = 42; alert (x === Infinity); 'display *" true "*. (По общему признанию, это неясный случай, и любой, кто решает переопределить «Бесконечность», «NaN» и т. Д., Должен ожидать нечетные вещи.) – LukeH

9

Простой n === n+1 или n === n/0 работы:

function isInfinite(n) { 
    return n === n/0; 
} 

Имейте в виду, что родной isFinite() принуждают входы чисел. isFinite([]) и isFinite(null) являются, например, true.

2

Фактически n === n + 1 будет работать для чисел, больших 51 бит, например.

1e16 + 1 === 1e16; // true 
1e16 === Infinity; // false 
+2

Это должен быть комментарий к ответу Райенве. – Gary

4

В ES6, The Number.isFinite() Метод определяет переданное значение, является ли конечное число.

Number.isFinite(Infinity); // false 
Number.isFinite(NaN);  // false 
Number.isFinite(-Infinity); // false 

Number.isFinite(0);   // true 
Number.isFinite(2e64);  // true 
+0

[Доступно] (https://www.w3schools.com/jsref/jsref_isfinite.asp) из ECMAScript 1 – MohaMad