はじめに
parseInt(true)
はNaN
になるのに、isNaN(true)
がfalse
になる理由が分からなかった
isNaN()
これ
![](https://developer.mozilla.org/mdn-social-share.cd6c4a5a.png)
isNaN() - JavaScript | MDN
isNaN() 関数は引数が NaN (非数) かどうかを判定します。isNaN 関数の型強制は意外なものになる可能性があるため、他の Number.isNaN() を使用した方が良いかもしれません。
こいつは、引数が数値型でない場合に、暗黙的な型強制が発生する
// これは true (= NaN)
isNaN('true')
isNaN('false')
// でもこうすると false
isNaN(true)
isNaN(false)
数値に型強制されるってことは、こういうことだよな と思った。が間違い。
// 結果は NaN
parseInt(true)
parseInt(false)
「はじめに」の答え
数値型への型強制は、parseInt()じゃなくてNumber()だよねって話
parseInt()とNumber()の違い
parseInt()は、文字列の数字部分を取り出し、数値に変換する
Number()は、文字列の意味を解釈し、数値に変換する。無理な時はNaNを返す
実際の挙動
parseInt("123Abc"); // 123
parseInt("101", 2); // 5 (二進数)
parseInt("2e3"); // 2
Number("123Abc"); // NaN
Number("101", 2); // 101
Number("2e3"); // 2000 (2 x 10^3)
Number("101", 2)
がエラーにならないのも気持ち悪い
まとめ
Numberオブジェクトは、割と罠。
こういうのとか
var a = new Number('123');
var b = Number('123');
a === 123; // false
b === 123; // true
a instanceof Number; // true
b instanceof Number; // false
参考
![](https://developer.mozilla.org/mdn-social-share.cd6c4a5a.png)
Number - JavaScript | MDN
Number (数値)の値は 37 や -9.25 のような浮動小数点数を表します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9SmF2YVNjcmlwdCVFMyU4MSVBRSVFNiU5NSVCMCVFNSU4MCVBNCVFMyU4MyU4MSVFMyU4MiVBNyVFMyU4MyU4MyVFMyU4MiVBRiVFMyU4MSVBQiVFMyU4MSVBNCVFMyU4MSU4NCVFMyU4MSVBNiVFMyU4MyU4RiVFMyU4MyU5RSVFMyU4MSVBMyVFMyU4MSU5RiVFMyU4MSVBRSVFMyU4MSVBNyVFMyU4MyVBMSVFMyU4MyVBMiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9MDQ5YTY3MzIwYzNjYjY1YjkyZDQ0OTdmOGIzN2IzYWE&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0YWt1LTA3MjgmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTNjNTQ0ZDRhZTJhZjdkMzZkY2ExZGFiNGI0M2ExZjM4&blend-x=142&blend-y=436&blend-mode=normal&txt64=aW4g44OH44Kj44OD44OX5qCq5byP5Lya56S-&txt-width=770&txt-clip=end%2Cellipsis&txt-color=%23212121&txt-font=Hiragino%20Sans%20W6&txt-size=36&txt-x=156&txt-y=536&s=f97997166b743cddeba3b811583331f4)
JavaScriptの数値チェックについてハマったのでメモ - Qiita
はじめにこんにちは、普段は業務で求人系サービスの開発や社内向けツールの開発を行なっている@taku-0728です。今回はJavaScriptの数値チェックについてまとめました。調べると多くの記…