【JavaScript】数値チェックに isNaN は使えない!?その理由は?

こんにちは!CODE CLUB965のKです!

今回は、JavaScriptで数値かどうかチェックするときに、isNaN関数を使わない方がいい理由について書こうと思います。

数値チェックに isNaN を使うのは「あり」?

結論から言うと、「なし」です。

理由として、

「数値であることをチェックする」のではなく「数値でないことをチェックする」関数だからです。

判定する値に制約があるなら、isNaN で問題ないかもしれませんが、きちんと関数の仕様を理解しておかないとバグの原因となるので気をつけて下さい。

詳しい理由は、これから書いていきます。

理由1:指数表記の e が数値扱いになる

まず最初の理由として指数表記の扱いがあります。
指数表記とは、 10 の n 乗を「e+n」のように表記することです。

例えば、 Excel でセルに桁の大きな数字を入力すると「1E+11」のように変換されたことありませんか?
このアルファベットの 「E」 を使って表現されたのが指数表記です。

これは、JavaScript でも同様に表現できます。
意図して指数表記で表現しているのであれば問題ないのですが、一般的に指数表記で数字を表現することはありません。
要は、意図せず入力された指数表記が判定対象になると、判定をスルーしてしまう問題が起こってしまいます。

ただ、プログラム的には数字として扱うのが正しいので、そこを理解しておけばOKです。

理由2:null 値が true になる

isNaN を使わない方がいい2つ目の理由は、null値がtrueになってしまうことです。
isNaN の引数の値で戻り値がどう違うのか以下にまとめてみます。

引数返却値
数字false
文字列true
undefinedtrue
nullfalse
truefalse
falsefalse

一覧を見たら分かると思いますが、 null を渡すと false が返ります。
これは null が数値の 0 として変換されてしまうことが原因です。( JavaScript の仕様です。)

同様に、true や false も各々 1 と 0 に変換されるため、false となります。
さすがに入力データが null の場合に 0 として取扱うのは微妙です。

まとめ

上記の1と2の理由から、数値判定するときに、わざわざ isNaN を使う前に、e が含まれていないか確認したり、 null の boolean チェックをするのは正直面倒です。

なので、数値判定に isNaN は使わない方がいいと思います。

数値判定をする際は、isNaN をどう使うか考えるよりも、条件に応じた正規表現のチェック関数を作った方が簡単でバグの発生も防げます。

以下に、参考になる記事を書いていますので、まだ読んでいない方はぜひ読んでみて下さい!

それでは、また!

Follow me!

【JavaScript】数値チェックに isNaN は使えない!?その理由は?” に対して1件のコメントがあります。

コメントは受け付けていません。