JavaScriptにおける非数(NaN)の扱い

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 === NaNfalseを返します。

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の判定方法には、用途に応じてisNaNNumber.isNaNを使い分ける必要があります。isNaNはより柔軟ですが曖昧な場合があり、Number.isNaNは厳密な判定を行います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です