JSのparseInt()とNumber()の違いをあらためて

表題の通り。今までparseInt()しか使ってなかったのですが、Number()を使用したプルリクを見る機会があって調べたので、メモしておく。

挙動の違い

関数として呼び出されるNumber()は型変換を実行し、parseInt()は解析を実行します。

parseInt('20p') // => 20
parseInt('10100', 2) // => 20 (二進数)
parseInt('2e1') // => 2

Number('20p') // => NaN
Number('2e1') // => 20(=2 x 10^1)

Number()について、もう少し詳しく

Number()は、暗黙の8進数を検出しませんが、明示的な8進数表記を検出できます。

Number('010')         // 10
Number('0o10')        // 8(明示的な8進数)

parseInt('010')       // 8(暗黙の8進数)
parseInt('010', 10)   // 10(10進数)

また、parseInt()のように、16進表記の数値を処理できます。

Number('0xF')    // 15(16進数)
parseInt('0xF')  // 15(16進数)

パフォーマンスの観点から

typeof parseInt('123') => number
typeof Number('123) => number
typeof new Number('123') => object

最初の2つは、オブジェクトではなくプリミティブを返すため、パフォーマンスが向上します。

まとめ

parseInt()は、数値を含む文字列のうち、数字部分を取り出し数値に変換する。

Number()は、数値を含む文字列の意味を解釈し、数値に変換する。文法に合わない文字列の時は、NaNとなる。

参考

What is the difference between parseInt() and Number()?
How do parseInt() and Number() behave differently when converting strings to numbers?
タイトルとURLをコピーしました