表題の通り。今まで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?