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

広告

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

値が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かつ数値型がどうかを調べる(isNaN)(1)

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

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

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

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

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

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 )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。