💡

JavaScriptにおけるisNaN()とNumber.isNaN()の違いと推奨

2024/02/17に公開

はじめに

JavaScript で数値を扱う上で避けて通れないのが、NaN(Not a Number)の判定です。NaNは、数学的に無効な演算の結果として発生する特別な値であり、例えば0/0Math.sqrt(-1)のような演算がこれに該当します。JavaScript でこれを判定するには、グローバル関数のisNaN()NumberオブジェクトのNumber.isNaN()メソッドの 2 つが用意されていますが、これらの違いを正しく理解することが重要です。

結論から言うと、Number.isNaN()メソッドを使うことが推奨されます。この記事では、isNaN()Number.isNaN()の違いを解説します。

Number.isNaN()メソッド

Number.isNaN()メソッドは、引数が厳密にNaNであり、かつNumber型である場合に限りtrueを返します。このメソッドは ECMAScript 2015 (ES6)で導入され、より厳格なNaNの判定を可能にしました。

使用例

console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("NaN")); // false
console.log(Number.isNaN(123)); // false
console.log(Number.isNaN("123")); // false
console.log(Number.isNaN("Hello")); // false

この例から、Number.isNaN()が文字列や他の型の値であってもfalseを返すことがわかります。これにより、意図しない型変換を避けながらNaNを判定することができます。

グローバル関数isNaN()

グローバル関数isNaN()はより広範な用途に使われ、引数をNumber型へと強制的に変換した上で、その結果がNaNであるかを判定します。この自動型変換は便利な場合もありますが、予期せぬ結果を招くこともあります。

使用例

console.log(isNaN(NaN)); // true
console.log(isNaN("NaN")); // true
console.log(isNaN(123)); // false
console.log(isNaN("123")); // false
console.log(isNaN("Hello")); // true

isNaN()は、数値への変換が可能な文字列に対してはfalseを返しますが、'Hello'のように数値に変換できない文字列に対してはtrueを返します。これはisNaN()が内部で型変換を行っているためです。

まとめと推奨事項

JavaScript におけるisNaN()Number.isNaN()の正しい理解と使用は、信頼性の高い数値処理を実現するために不可欠です。NaNの判定が必要な場合、特に型変換による誤検出を避けたい場合は、Number.isNaN()を使用することが推奨されます。このメソッドにより、より信頼性の高いコードを書くことが可能になります。

JavaScript の数値処理においてisNaN()Number.isNaN()を適切に使い分けることは、堅牢でバグの少ないアプリケーション開発の基礎となります。この記事が、より良い JavaScript コードの書き方への一助となれば幸いです。

Discussion