【javascript】parseIntをtry-catchで囲んでもパースエラーをキャッチしてくれない
概要
先日Node.jsを使っていて、
GETで受け取ったパラメータのチェックをするコードを書いた際に、
Javaの経験から、何となくtry-catchで囲っとけばパース出来ないパラメータが飛んできても大丈夫かなと思っていたのですが、
上手くいかなかったので調べたことをメモしておきます。
parseIntに文字列を食わせてみる
自分の手元で最初に以下のようなコードを書きました。
try{ id = parseInt(reqParam, 10); }catch(err){ logger.error(err); //←ここに来てくれない reqError = true; }
javaだと上みたいな書き方をすると「ParseException」という例外がスローされてキャッチに入るのですが、
javascriptだとキャッチされませんでした。
少しコードを追ってみるとidにNaN(非数)という値が入ってました。
javascriptのパースエラーはisNaN()とisFinite()を使おう
もう少し調べてみると、似たような問題に突き当たってる人を見つけました。
stackoverflow.com
どうやらjavascriptではisNaN(), isFinite()という二つの関数を使って、
パースエラーを検出するのが正しい作法なようです。
感想
Node.jsのサンプルコードを見ていると稀にtry-catchが使われているのを見るので、
javaのように使っていいのかなと思うと、そうでない場面に度々出会います。。
今のところNode.jsではtry-catchは自身でエラーハンドリングを考えて
ガッツリ組むとき以外は使わないっていう認識で良いんですかね??
まぁjavascript自体、日々作法が変わっていっているので何が正しいかわかりませんが…