【JavaScript】parseInt()とNumber()の違い

はじめに

parseInt(true)NaNになるのに、isNaN(true)falseになる理由が分からなかった

isNaN()

これ

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

参考

Number - JavaScript | MDN
Number (数値)の値は 37 や -9.25 のような浮動小数点数を表します。
JavaScriptの数値チェックについてハマったのでメモ - Qiita
はじめにこんにちは、普段は業務で求人系サービスの開発や社内向けツールの開発を行なっている@taku-0728です。今回はJavaScriptの数値チェックについてまとめました。調べると多くの記…
タイトルとURLをコピーしました