console.log(isNaN(NaN)); // true console.log(isNaN(5)); // false console.log(isNaN(true)); // false console.log(isNaN('NaN')); // true console.log(isNaN({a:100})); // true いやいや下の2つw そっちのほうが便利な場合もあるのは分かるんですが... isNaN() 謎挙動の理由 引数が暗黙的に数値に型変換してそれが NaN に変換されちゃって true が 帰ってきてるのだと思われる. isNaN() 謎挙動への対策 感覚的には NaN のときだけ NaN を返して欲しい! って調べてたら ECMAScript6 では Number.isNaN() ってやつが定義されてて これだとちゃんと NaN のときだけ true を