JavaScript - ES2015仕様のNumber.isNaN() は数値判定に使えない
JavaScriptで数値判定を行う際に、isNaN()を使っている方がいると思います。
ES2015からはNumberオブジェクトのメソッドとして、 Number.isNan()メソッドが追加されました。
但し、残念ながらNumber.isNaN()は数値判定には全く使えないので注意が必要です。
普通の文字列を与えても「false」を返す
isNan()とNumber.isNaN()に文字列「'abc'」を引数として与えてみます。
console.log(isNaN('abc')); // true
console.log(Number.isNaN('abc')); // false
isNaN()では「true」が返ってくるので、「数値ではない」と判断できまが、
Number.isNaN()では「false」が返ってきます。
これでは数値判定に使えません。
戻り値が異なる理由
戻り値が異なるのは、仕様が異なるからです。
グローバルオブジェクトのisNaN()メソッドでは、 「引数が NaN (非数)かどうか」を判定します。
一方、Number.isNaN()メソッドでは、 「引数がNaN (非数)であり、且つNumber型かどうか」を判定します。
Number.isNaN()は、より堅牢な仕様に変更されているため、 今回のような違いが出てきます。
これまでのグローバルオブジェクトのisNaN()と同じ感覚で使っても、 同じ結果は得られないので注意が必要です。
数値判定のメソッドとしては、Number.isFinite()メソッドがおすすめです。
参考記事: 数値判定で一番使えるのはisNaN()?isFinite()?