(JavaScript)isNaNメソッドの挙動の違い
ビジネスバンクグループ エンジニア の高橋 慶太です。
今回は、開発時に「えっ!?」と思った「isNaN」メソッドの挙動について、書いてみました。
isNaNメソッドとは?
isNaNメソッドは、名前の通り、NaN(Not a number)かどうかを判定するメソッドです。
JavaScriptにおいて、NaNかどうかを判定する場合にいくつか方法がありますが、記述の方法によって期待値が異なる場合があるため、どういう実行結果になるのかを把握した上で使う必要があります!
比較
今回は以下の3つの記述方法を比較してみました。
- isNum(value)
- Number.isNum(value)
- _.isNaN(value) ※ Underscore.jsライブラリ
メソッド | |||
---|---|---|---|
引数 | isNaN(value) | Number.isNaN(value) | _.isNaN(value) |
NaN | true | true | true |
Number.NaN | true | true | true |
0/0 | true | true | true |
"NaN" | true | false | false |
undefined | true | false | false |
{} | true | false | false |
new Date().toString() | true | false | false |
new Date() | false | false | false |
[] | false | false | false |
1/0 | false | false | false |
true | false | false | false |
null | false | false | false |
123 | false | false | false |
123.45 | false | false | false |
"123" | false | false | false |
"123.45" | false | false | false |
"" | false | false | false |
" " | false | false | false |