→
グローバル プロパティ NaN は非数(Not-A-Number)を表す値です。
¶省く
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だったインデックスを返す。