JavaScriptにおける非数(NaN)の扱い
このページでは、JavaScriptにおける非数(NaN)についての詳細な解説を行います。以下のリンクをクリックすると、各トピックにジャンプできます。
NaNとは
NaNは「Not-a-Number」の略で、JavaScriptにおける特別な値を表します。これは、計算の結果が数値として意味を持たない場合に返されます。
例えば、以下のような場合にNaNが発生します。
// 0を0で割る
console.log(0 / 0); // NaN
// 数値として解釈できない文字列を数値に変換
console.log(parseInt("abc")); // NaN
// 数値演算の不正な操作
console.log(Math.sqrt(-1)); // NaN
NaNは「数値型」に分類されますが、特殊な性質を持っています。例えば、NaN === NaN
はfalse
を返します。
console.log(NaN === NaN); // false
Number.NaNとは
Number.NaN
は、NaN
を参照するための定数です。NaN
と同じ値を持ちます。
通常、直接NaN
を使用することが多いですが、Number.NaN
を使用しても同じ結果が得られます。
console.log(NaN); // NaN
console.log(Number.NaN); // NaN
console.log(NaN === Number.NaN); // true
isNaN(value)
isNaN(value)
は、指定された値がNaNであるかどうかを判定します。この関数は、値を数値に変換した結果がNaNになる場合にtrue
を返します。
例:
// 数値として解釈できない文字列
console.log(isNaN("abc")); // true
// 数値として有効な文字列
console.log(isNaN("123")); // false
// NaNそのもの
console.log(isNaN(NaN)); // true
// 変換可能な値
console.log(isNaN(123)); // false
注意点として、isNaN
は内部的に値を数値に変換するため、非数値型の値にもtrue
を返す場合があります。
console.log(isNaN("hello")); // true
console.log(isNaN(undefined)); // true
Number.isNaN(value)
Number.isNaN(value)
は、ES6(ECMAScript 2015)で導入された新しいメソッドです。このメソッドは、より厳密にNaNを判定します。
isNaN
と異なり、値を数値に変換しません。つまり、値そのものがNaN
である場合のみtrue
を返します。
例:
// NaNそのもの
console.log(Number.isNaN(NaN)); // true
// 数値ではないがNaNではない
console.log(Number.isNaN("abc")); // false
// 変換可能な値
console.log(Number.isNaN(123)); // false
// undefined
console.log(Number.isNaN(undefined)); // false
この違いにより、Number.isNaN
は意図しない挙動を避けることができます。
console.log(isNaN("hello")); // true
console.log(Number.isNaN("hello")); // false
まとめ
JavaScriptにおけるNaNの判定方法には、用途に応じてisNaN
とNumber.isNaN
を使い分ける必要があります。isNaN
はより柔軟ですが曖昧な場合があり、Number.isNaN
は厳密な判定を行います。