2011-01-18 18 views

risposta

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

Si potrebbe utilizzare la funzione isFinite invece, a seconda di come si desidera trattare NaN. isFinite restituisce false se il numero è POSITIVE_INFINITY, NEGATIVE_INFINITY o NaN.

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

Perfetto - grazie! Omero. –

+2

Perché usare 'Numero. (POSITIVO | NEGATIVO) _INFINITY' invece di' -? Infinity' o '-? 1/0'? –

+3

@Eli: la proprietà globale 'Infinity' non è di sola lettura, il che significa che può essere ridefinita: Ad esempio,' var x = 42; Infinito = 42; alert (x === Infinity); 'visualizza *" true "*. (Ammetto che questo è un caso oscuro, e chiunque decida di ridefinire 'Infinity',' NaN' etc dovrebbe aspettarsi che accadano cose strane.) – LukeH

9

Un semplice n === n+1 o n === n/0 opere:

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

essere consapevoli del fatto che il nativo isFinite() costringe gli ingressi ai numeri. isFinite([]) e isFinite(null) sono entrambi true per esempio.

2

In realtà n === n + 1 funzionerà per numeri maggiori di 51 bit, ad es.

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

Questo dovrebbe essere un commento sulla risposta di Ryan. – Gary

4

In ES6, Procedimento Number.isFinite() determina se il valore passato è un numero finito.

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

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

[Accessibile] (https://www.w3schools.com/jsref/jsref_isfinite.asp) da ECMAScript 1 – MohaMad

Problemi correlati