Хотя Number и parseInt могут выглядеть одинаково, есть несколько существенных различий, которые могут привести к путанице и ошибкам. В этой статье мы рассмотрим различия и объясним их одно за другим.

Прежде всего, отметим, что parseInt используется для разбора строковых значений в целые числа с заданной системой счисления. Второй параметр является необязательным. Однако не использовать его — плохая практика, так как это приводит к ошибкам. Например, если мы передаем 255 как шестнадцатеричное значение (FF) с префиксом 0x, оно будет правильно обнаружено и проанализировано автоматически. Тем не менее, восьмеричные числа с префиксом 0 вызывали путаницу и проблемы, поскольку многие программисты предполагали, что 0 будет игнорироваться, а строка будет проанализирована как десятичная. Однако, поскольку в ECMAScript 5 автоматическое определение восьмеричных литералов было удалено, что… приводит к путанице, если вы знали, что значение с ведущим 0 будет обрабатываться как восьмеричное! Поэтому мы настоятельно рекомендуем просто добавить основание.

parseInt('10'); // returns 10
parseInt('0xFF'); // auto-detected hex value, returns 255
parseInt('010'); // depends on ECMAScript version, returns 10 now.
parseInt('11', 8); // returns 9 as radix is 8
parseInt('11', 10); // returns 11

Число — это объект-оболочка, который преобразует входные значения и возвращает… сюрприз, сюрприз: число! Подобно parseInt, он автоматически определяет шестнадцатеричные значения.

Однако большая разница между ними заключается в том, что мы передаем нечисловые значения, например true , false , null , undefined или что-то, что может выглядеть как число, например. 20px .

parseInt(true); // NaN
Number(true); // 1
parseInt(false); // NaN
Number(false); // 0
parseInt(null); // NaN
Number(null); // 0
parseInt(undefined); // NaN
Number(undefined); // NaN
parseInt('20px'); // 20
Number('20px'); // NaN
parseInt('abc'); // NaN
Number('abc'); // NaN

Наконец, нас не должно удивлять, если мы передаем литералы с плавающей запятой в parseInt и получаем… целое число! Следует отметить, что parseInt не округляет значение, а просто возвращает только целую часть.

parseInt('15.75'); // 15
Number('15.75'); // 15.75

В этой статье мы рассмотрели сходства и различия между Number и parseInt.

Если у вас есть какие-либо вопросы или комментарии, пожалуйста, оставьте их ниже.