CARVIEW |
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
NaN
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
グローバルプロパティ NaN
は非数 (Not-A-Number) を表す値です。
NaN のプロパティ属性 | |
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 不可 |
試してみましょう
function sanitize(x) {
if (isNaN(x)) {
return NaN;
}
return x;
}
console.log(sanitize("1"));
// Expected output: "1"
console.log(sanitize("NotANumber"));
// Expected output: NaN
解説
NaN
はグローバルオブジェクトのプロパティです。言い換えれば、グローバルスコープにある変数です。
NaN
の初期値は非数であり、 Number.NaN
の値と同等です。最近のブラウザーであれば、 NaN
は設定、書き込みがともに不可能なプロパティとなっています。そうでない場合であっても、オーバーライドは無効となります。プログラムの中で NaN
を使用するのは、むしろまれなことです。
NaN
を返す演算には 5 種類があります。
- 数値が解釈できない (例えば
parseInt("blabla")
またはNumber(undefined)
) - 結果が実数にならない数学演算 (例えば
Math.sqrt(-1)
) - オペランドが
NaN
である (例えば7 ** NaN
) - 不確定形 (例えば
0 * Infinity
またはundefined + undefined
) - 文字列が関わる加算以外の何らかの演算 (例えば
"foo" / 3
)
例
>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
を返します。
isNaN("hello world"); // true
Number.isNaN("hello world"); // false
同じ理由で、 bigint
値の場合は isNaN()
ではエラーが発生しますが、 Number.isNaN()
では発生しません。
isNaN(1n); // TypeError: Conversion from 'BigInt' to 'number' is not allowed.
Number.isNaN(1n); // false
加えて、配列メソッドの中には NaN
を見つけることができるもの、できないものがあります。
let arr = [2, 4, NaN, 12];
arr.indexOf(NaN); // -1 (false)
arr.includes(NaN); // true
arr.findIndex((n) => Number.isNaN(n)); // 2
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification> # sec-value-properties-of-the-global-object-nan> |
ブラウザーの互換性
Loading…