--- title: NaN slug: Web/JavaScript/Reference/Global_Objects/NaN tags: - JavaScript - Property - Reference translation_of: Web/JavaScript/Reference/Global_Objects/NaN ---
グローバルプロパティ NaN
は非数を表す値です。
{{js_property_attributes(0,0,0)}}
NaN
はグローバルオブジェクトのプロパティです。言い換えれば、グローバルスコープにある変数です。
NaN
の初期値は非数であり、{{jsxref("Number.NaN")}} の値と同等です。最近のブラウザーであれば、 NaN
は設定、書き込みがともに不可能なプロパティとなっています。そうでない場合であっても、オーバーライドは無効となります。プログラムの中で NaN
を使用するのは、むしろまれなことです。
NaN
を返す演算には5種類があります。
parseInt("blabla")
または Number(undefined)
)Math.sqrt(-1)
)NaN
(例えば 7 ** NaN
)0 * Infinity
)"foo" / 3
)NaN
は別の NaN
値を含むあらゆる数と (==
、!=
、===
、!==
によって) 同じではないと比較されます。ある値が NaN
かどうかを的確に判定するには {{jsxref("Number.isNaN()")}} か {{jsxref("Global_Objects/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
を返します。
isNaN('hello world'); // true Number.isNaN('hello world'); // false
加えて、配列メソッドの中には NaN
を見つけることができるもの、できないものがあります。
let arr = [2, 4, NaN, 12]; arr.indexOf(NaN); // -1 (false) arr.includes(NaN); // true arr.findIndex(n => Number.isNaN(n)); // 2
仕様書 |
---|
{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-nan', 'NaN')}} |
{{Compat("javascript.builtins.NaN")}}