NaN === NaN はfalseで判定される


条件式で

if (Number(var) !== NaN) {
...

のように書いて、varが数字文字列(例: '1')だった時の処理をif文内で行おうしたら、なぜかNumber(var) !== NaNtrue判定されてしまい、想定通りの処理ができなかった。

調査したところ、どうやらNaN === NaNfalse判定される仕様らしい。この場合、

if (!isNaN(Number(var)) {
...

で想定通り動くようになった。が、今度はeslintに

Unexpected use of 'isNaN'

と怒られる。

if (!Number.isNaN(Number(var))) {
...

これでeslint先生のお叱りも回避できた。よかったよかった。

参考記事