2016-05-31 6 views
-3

JavaScriptでは、isNaN(Infinity)は、Infinityが数値であるかのようにfalseを返します。しかし、それは数ではない数学的な無限大であったかのように無限にいくつかの算術演算の振る舞い:だからなぜInfinityは数字ですか?

enter image description here

、なぜisNaN(Infinity)リターンは本当でしょうか?それはits value defaults to a Number object?

+0

インフィニティはまた、NaNの数である、それだけで自分自身に等しくない...数です。 –

+2

IsNaN関数は、値がNaNの値と等しいかどうかを調べるだけです。何かが数字でないかどうかを確認するチェックではありません。無限大!= NaN。 – ManoDestra

+0

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

答えて

1

数値がNaNでないため、数式で使用できるためです。明らかに1 + NaNは動作しませんが、1 + InfinityInfinitySee here)を返します。あなたのリンクにある多くの例は数学的には不定です。これがナンとして帰ってきた理由です。たとえば、Infinity * 0は不定(See here)です。

これが役に立ちます。その実装はこれと同じであるので、

0

isNaN(Infinity)戻っfalseは、数学的な専門的とは何の関係もない理由、それは単にです:つまり

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

    return coerced !== coerced; 
} 

、それはNumberへの入力を強制します。強制的な値がNaNであると判断された場合(厳密にそれ自身と等しいかどうかをチェックすることによって)、trueを返します。それ以外の場合は、falseを返します。

[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('=================='); 
 
});

関連する問題