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