2016-05-31 10 views
-3

In JavaScript gibt isNaN(Infinity) false zurück, als ob Infinity eine Zahl wäre; aber mehrere arithmetische Operationen auf Unendlich verhalten, als ob es die mathematische Unendlichkeit waren, die keine Zahl ist:Warum ist Infinity eine Nummer?

enter image description here

Also, warum nicht isNaN(Infinity) return true? Ist es, weil its value defaults to a Number object?

+0

Unendlichkeit ist eine Zahl ... Auch ein NaN eine Zahl ist, es tut sich einfach nicht gleich. –

+2

Die IsNaN-Funktion prüft lediglich, ob ein Wert dem Wert "NaN" entspricht. Es ist kein Check, ob etwas nicht eine Nummer ist. Unendlichkeit! = NaN. – ManoDestra

+0

@JanDvorak 'typeof NaN === 'number''aber' isNaN (NaN) === true' –

Antwort

1

Infinity ist nicht NaN, weil Sie in der Lage sind, es in mathematischen Ausdrücken zu verwenden. Offensichtlich 1 + NaN würde nie funktionieren, aber 1 + Infinity gibt Infinity (See here) zurück. Viele der Beispiele, die Sie in Ihrem Link haben, sind mathematisch unbestimmt, weshalb sie als Nan zurückkehren. Zum Beispiel ist Infinity * 0 unbestimmt (See here).

Hoffe, das hilft.

0

Der Grund isNaN(Infinity) kehrt false nichts mit mathematischen technischen zu tun hat, ist es einfach, weil ihre Umsetzung ist dies gleich:

function isNaN(object) { 
    var coerced = +object; 

    return coerced !== coerced; 
} 

Mit anderen Worten, zwingt er den Eingang zu einem Number. Wenn der erzwungene Wert als NaN ermittelt wird (indem überprüft wird, ob er nicht exakt mit sich selbst übereinstimmt), wird true zurückgegeben. Andernfalls gibt es false zurück.

[Infinity, null, undefined, true, new Date(), {}, [], [1], [1,2,3], 'blah', '4'].forEach(function (object) { 
 
    console.log('object: ' + (typeof object !== 'number' ? JSON.stringify(object) : object)); 
 
    console.log('coerced: ' + (+object)); 
 
    console.log('isNaN: ' + isNaN(object)); 
 
    console.log('=================='); 
 
});

Verwandte Themen