NaNかどうかを判断するにはisNaN()を使う
JavaScriptだと基本的なことなんだろうけど、10分くらい悩んだのでメモ。
テキストファイルから位置情報を読み込んでほげほげするプログラムを作ってた。読み込んだ文字列が数値じゃない場合には処理を分ける必要があるので、こんなプログラムを書いた。
function isLatLng(latitude, longitude) { var lat = parseFloat(latitude); var lng = parseFloat(longitude); if (lat == NaN || lng == NaN) return false; if (lat < -90 || lat > 90) return false if (lng < -180 || lng > 180) return false; return true; }
なぜか空文字列でも false にならない。
function isLatLng(latitude, longitude) { var lat = parseFloat(latitude); var lng = parseFloat(longitude); console.log('lat=' + lat + ', lng=' + lng); if (lat == NaN || lng == NaN) return false; if (lat < -90 || lat > 90) return false if (lng < -180 || lng > 180) return false; return true; }
出力結果
lat=NaN, lng=NaN
コンソールに出力してみたら、しっかり NaN が入ってるし。
ぐぐってみたら、NaN は、== で比較しちゃいかんと。考えてみればそのとおりで、NaN って数値としては固定の値ではないから NaN と NaN は一般的には異なる値だ。
NaNかどうかを判断するには、isNaN() を使わないといけなかった。
というわけで、以下のコードが正解。
function isLatLng(latitude, longitude) { var lat = parseFloat(latitude); var lng = parseFloat(longitude); if (isNaN(lat) || isNaN(lng)) return false; if (lat < -90 || lat > 90) return false if (lng < -180 || lng > 180) return false; return true; }