NaNをisNaNで判定しようとするとおかしな事になる可能性があるので気をつけましょうって話です。 Effective JavaScriptで紹介されていたのですが、知らなかったのでメモです。 isNaNの挙動 標準で用意されているisNaNにNaNを渡すと確かにtrueが返ります。 ただ、暗黙の型変換によって引数を数値へと変換してしまう為、NaN自身でなくても、NaNへと変換される類のものに対してもtrueを返してしまいます。 isNaN(NaN); // true isNaN("foo"); // true isNaN(undefined); // true isNaN({}); // true isNaN({ valueOf: "foo" }); // true isNaNはNaNであるかの判定ではなく、引数が数値へ変換可能かどうかの判定に使われるみたいです。 NaN判定のイディオム
![NaNの判定について - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/7b18501c325eb803bd4282b9ce402c68743ce473/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9TmFOJUUzJTgxJUFFJUU1JTg4JUE0JUU1JUFFJTlBJUUzJTgxJUFCJUUzJTgxJUE0JUUzJTgxJTg0JUUzJTgxJUE2JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz04YjQ4NmI4MGYwOTFiYmY3NTZkN2RiNmIxNzJkN2M3NA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwc291dGgzNyZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9NGNkMGE4NWFlYTFlMTU1ZjA5YTlmZWNhZDhhNzdkOGU%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D4c26471e739e2e8d751c8d7598b713dd)