Number() vs parseInt()
Both Number()
and parseInt()
are often used to convert a string to number.
Differences
Number()
converts the type whereas parseInt parses the value of input.// Parsing
parseInt('32px'); // 32
parseInt('5e1'); // 5
// Convert type
Number('32px'); // NaN
Number('5e1'); // 50As you see,
parseInt
will parse up to the first non-digit character. On the other hand,Number
will try to convert the entire string.parseInt
accepts two parameters. The second parameter is used to indicate the radix number.parseInt('0101'); // 101
parseInt('0101', 10); // 101
parseInt('0101', 2); // 5
Number('0101'); // 101They return different results when we passing special values such as
undefined
ornull
:parseInt(); // NaN
parseInt(null); // NaN
parseInt(true); // NaN
parseInt(''); // NaN
Number(); // 0
Number(null); // 0
Number(true); // 1
Number(''); // 0
Good practices
Always pass the radix to
parseInt
.The
parseInt
method takes two parameters:parseInt(value, radix);
The second parameter specifies the current numeral system. In the case it's not specified, then it will be set automatically based on the value.
- If the value starts with
0x
or0X
, then the radix is 16 (hexadecimal) - In other cases, the radix is 10 (decimal).
In the older versions of JavaScript, if the string starts with 0 then the radix is set as 8 (octal).
parseInt('0xF'); // 15
parseInt('0XF'); // 15
parseInt('0xF', 16); // 15
parseInt('0xF', 10); // 0Since the method could be implemented differently in different versions of JavaScript and browsers, it's recommended to pass the radix number.
- If the value starts with
Trim the spaces before parsing the number.
Both
Number()
andparseInt
accept the spaces in input. But be aware that you could get different result when passing a value with spaces as following:parseInt(' 5 '); // 5
parseInt('12 345'); // 12, not 12345To avoid the similar situations, you should remove all spaces before parsing:
parseInt(value.replace(/\s+/g, ''), 10);
Don't use
new Number()
to compare the numbers.Number('2') == 2; // true
Number('2') === 2; // true
new Number('2') == 2; // true
new Number('2') === 2; // false
const a = new Number('2');
const b = new Number('2');
a == b; // false
a === b; // false
Tip
Instead of using the Number()
constructor to convert a string to number, you can use the +
operator:
+'010'; // 10
+'2e1'; // 20
+'0xF'; // 15