値がNaNかつ数値型であるかどうかを調べる(Number.isNaN)

Number オブジェクトの静的メソッドである Number.isNaN は、対象の値が NaN (Not a Number) かつ値が数値型かどうかを調べ、 true または false を返します。ここでは Number オブジェクトの Number.isNaN メソッドの使い方について解説します。

(Last modified: )

値がNaNかつ数値型がどうかを調べる(isNaN)

Number オブジェクトの Number.isNaN メソッドは、対象の値が NaN かつデータ型が数値型かどうかを調べて true または false を返します。書式は次の通りです。

Number.isNaN(値)

引数に指定した値が NaN で、かつ数値型かどうかを調べます。値が数値型ではない場合はすべて false となります。

※ NaN とはグローバルオブジェクトのプロパティのひとつで非数( Not A Number )を表します。 Number オブジェクトで用意されている Number.NAN も同じです。

NaN は特殊な値で、等価演算子である == や === で NaN 自身と等しいかどうか調べても false となるため等価演算子で NaN かどうかを調べることはできません。そのため Number.isNaN メソッドを使います。

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

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

Number.isNaN(NaN);
>> true

Number.isNaN(0 / 0);
>> true

次の値は数値型に変換すると NaN となりますが、 Number オブジェクトの Number.isNaN メソッドでは対象の値を数値型には変換しません。数値型以外の値はすべて false となります。

Number.isNaN('Hello');  // 数値に変換すると NaN
>> false

Number.isNaN(undefined);  // 数値に変換すると NaN
>> false

Number.isNaN({a:'10'});  // 数値に変換すると NaN
>> false

isNaN関数とNumber.isNaNメソッドの違い(isNaN)

グローバル関数の isNaN 関数と、 Number オブジェクトの Number.isNaN メソッドはどちらも対象の値が NaN かどうかを調べるのに使いますが、 isNaN 関数が引数が数値型でなかった場合に数値型に変換してから NaN かどうか判定するのに対して、 Number.isNaN メソッドは引数が数値型でなかった場合はすべて false とする点が異なります。

次のサンプルをみてください。

isNaN(NaN);
>> true
Number.isNaN(NaN);
>> true

isNaN(0 / 0);
>> true
Number.isNaN(0 / 0);
>> true

isNaN('Hello');
>> true
Number.isNaN('Hello');
>> false

isNaN(undefined);
>> true
Number.isNaN(undefined);
>> false

isNaN({a:'10'});
>> true
Number.isNaN({a:'10'});
>> false

NaN や 演算の結果 NaN となるような式についてはどちらでも true となりますが、グローバル関数の isNaN メソッドではそれ以外の値でも true となる場合があります。厳密に数値型の NaN かどうかを判別するには Number.isNaN メソッドを使用してください。

※ グローバル関数の isNaN 関数については「isNaN関数(値がNaNかどうかを調べる)」を参照されてください。

-- --

Number オブジェクトの Number.isNaN メソッドの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。