Хотя 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.
Если у вас есть какие-либо вопросы или комментарии, пожалуйста, оставьте их ниже.