JavaScriptにおけるisNaN()とNumber.isNaN()の違いと推奨
はじめに
JavaScript で数値を扱う上で避けて通れないのが、NaN(Not a Number)の判定です。NaNは、数学的に無効な演算の結果として発生する特別な値であり、例えば0/0やMath.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