JavaScript

NaN グローバル プロパティ

 編集:2022.08.10 by T.A.

グローバル プロパティ NaN は非数(Not-A-Number)を表す値です。

解説

¶省く

NaN に対するテスト

NaN は別の NaN 値を含むあらゆる数と(==、!=、===、!== によって)同じではないと比較されます。ある値が NaN かどうかを的確に判定するには Number.isNaN() か isNaN() を使用してください。あるいは自己比較を実行しましょう。NaN は、また NaN だけが、自身と同等ではないと比較評価されます。

//コンソールにて
NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true
Number.isNaN(NaN);  // true

function valueIsNaN(v) { return v !== v; }
valueIsNaN(1);          // false
valueIsNaN(NaN);        // true
valueIsNaN(Number.NaN); // true

ただし、isNaN() と Number.isNaN() には違いがあることに気をつけてください。前者は、値そのものが NaN であったり、値の変換の結果 NaN になる場合に true を返します。後者は値そのものが NaN のときにだけ true を返します。

D=isNaN('hello world');        //=true
D=Number.isNaN('hello world'); //=false

同じ理由で、bigint 値の場合は isNaN() ではエラーが発生しますが、Number.isNaN() では発生しません。

D=isNaN(1n);        //エラー発生 TypeError: Conversion from 'BigInt' to 'number' is not allowed.
D=Number.isNaN(1n); //=false

加えて、配列メソッドの中には NaN を見つけることができるもの、できないものがあります。

let arr = [2, 4, NaN, 12];
D=arr.indexOf(NaN);                      //=-1。NaNを探す。
D=arr.includes(NaN);                     //=true。NaNを含むか。
D=arr.findIndex(n => Number.isNaN(n));   //=2。NaNだったインデックスを返す。

テスト