Number() vs parseInt()

Both `Number()` and `parseInt()` are often used to convert a string to number.

Differences

1. `Number()` converts the type whereas parseInt parses the value of input.

``// ParsingparseInt("32px");   // 32parseInt("5e1");    // 5// Convert typeNumber('32px');     // NaNNumber('5e1');      // 50``

As you see, `parseInt` will parse up to the first non-digit character. On the other hand, `Number` will try to convert the entire string.

2. `parseInt` accepts two parameters. The second parameter is used to indicate the radix number.

``parseInt('0101');       // 101parseInt('0101', 10);   // 101parseInt('0101', 2);    // 5   Number('0101');         // 101 ``
3. They return different results when we passing special values such as `undefined` or `null`:

``parseInt();         // NaNparseInt(null);     // NaNparseInt(true);     // NaNparseInt("");       // NaNNumber();           // 0Number(null);       // 0Number(true);       // 1Number("");         // 0``

Good practices

1. 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` or `0X`, 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');        // 15parseInt('0XF');        // 15parseInt('0xF', 16);    // 15parseInt('0xF', 10);    // 0``

Since the method could be implemented differently in different versions of JavaScript and browsers, it's recommended to pass the radix number.

2. Trim the spaces before parsing the number.

Both `Number()` and `parseInt` accept the spaces in input. But be aware that you could get different result when passing a value with spaces as following:

``parseInt('   5   ');    // 5parseInt('12 345');     // 12, not 12345``

To avoid the similar situations, you should remove all spaces before parsing:

``parseInt(value.replace(/\s+/g, ''), 10);``
3. Don't use `new Number()` to compare the numbers.

``Number('2') == 2;           // trueNumber('2') === 2;          // truenew Number('2') == 2;       // truenew Number('2') === 2;      // falseconst a = new Number('2');const b = new Number('2');a == b;     // falsea === 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``