I’ve only used parseInt() until now, but I had a chance to see pull-request using Number(), so I checked it, so I made a note of it.
Contents
Differences in behavior
Number()
called as a function performs type conversion, parseInt()
performs analysis.
parseInt('20p') // => 20
parseInt('10100', 2) // => 20 (Binary number)
parseInt('2e1') // => 2
Number('20p') // => NaN
Number('2e1') // => 20(=2 x 10^1)
Learn a little more about Number()
Number()
does not detect implicit octal numbers, but it can detect explicit octal notation.
Number('010') // 10
Number('0o10') // 8 (explicit octal number)
parseInt('010') // 8 (implicit octal number)
parseInt('010', 10) // 10 (decimal radix used)
You can also process hex notation numbers, such as parseInt()
.
Number('0xF') // 15 (hex number)
parseInt('0xF') // 15 (hex number)
From a performance perspective
typeof parseInt('123') => number
typeof Number('123) => number
typeof new Number('123') => object
The first two return primitives instead of objects, which improves performance.
Summary
parseInt()
converts a numeric portion of a string containing a number into a numeric value.
Number()
interprets the meaning of a string that contains a number and converts it to a number. If the string does not match the grammar, it becomes NaN.
Reference

What is the difference between parseInt() and Number()?
How do parseInt() and Number() behave differently when converting strings to numbers?