Сводка
Функция parseInt()
принимает строку в качестве аргумента и возвращает целое число в соответствии с указанным основанием системы счисления.
Синтаксис
parseInt(string, radix);
Параметры
string
- Значение, которое необходимо проинтерпретировать. Если значение параметра
string
не принадлежит строковому типу, оно преобразуется в него (с помощью абстрактной операцииToString
). Пробелы в начале строки не учитываются.
radix
- Целое число в диапазоне между 2 и 36, представляющее собой основание системы счисления числовой строки
string
, описанной выше. В основном пользователи используют десятичную систему счисления и указывают 10. Всегда указывайте этот параметр, чтобы исключить ошибки считывания и гарантировать корректность исполнения и предсказуемость результата. Когда основание системы счисления не указано, разные реализации могут возвращать разные результаты.
Возвращаемое значение
Целое число, полученное парсингом (разбором и интерпретацией) переданной строки. Если первый символ не получилось сконвертировать в число, то возвращается NaN
.
Описание
Функция parseInt
преобразует первый переданный ей аргумент в строковый тип, интерпретирует его и возвращает целое число или значение NaN
. Результат (если не NaN
) является целым числом и представляет собой первый аргумент (string
), рассматривающийся как число в указанной системе счисления (radix
). Например, основание 10 указывает на преобразование из десятичного числа, 8 - восьмеричного, 16 - шестнадцатеричного и так далее. Если основание больше 10
, то для обозначения чисел больше 9
используются буквы. Например, для шестнадцатеричных чисел (основание 16) используются буквы от A
до F
.
Если функция parseInt
встречает символ, не являющийся числом в указанной системе счисления, она пропускает этот и все последующие символы (даже, если они подходящие) и возвращает целое число, преобразованное из части строки, предшествовавшей этому символу. parseInt
отсекает дробную часть числа. Пробелы в начале и конце строки разрешены.
Если основание системы счисления имеет значение undefined
(неопределено) или равно 0 (или не указано), то JavaScript по умолчанию предполагает следующее:
- Если значение входного параметра
string
начинается с "0x
" или "0X
", за основание системы счисления принимается 16, и интерпретации подвергается оставшаяся часть строки. - Если значение входного параметра
string
начинается с "0", за основание системы счисления принимается либо 8, либо 10, в зависимости от конкретной реализации. В спецификации ECMAScript 5 прописано использование 10 (десятичная система), но это поддерживается еще не всеми браузерами, поэтому необходимо всегда указывать основание системы счисления при использовании функцииparseInt
. - Если значение входного параметра
string
начинается с любого другого символа, система счисления считается десятичной (основание 10).
Если первый символ строки не может быть преобразован в число, parseInt
возвращает значение NaN
.
С точки зрения математики, значение NaN
не является числом в какой-либо системе счисления. Чтобы определить, вернет ли parseInt
значение
NaN
в качестве результата, можно вызвать функцию isNaN
. Если NaN
участвует в арифметических операциях, результатом также будет NaN
.
Для преобразования числа в строку в указанной системе счисления, используйте intValue.toString(radix)
.
Примеры
Пример: Использование parseInt
Все следующие примеры возвращают 15
:
parseInt(" 0xF", 16); parseInt(" F", 16); parseInt("17", 8); parseInt(021, 8); parseInt("015", 10); parseInt(15.99, 10); parseInt("FXX123", 16); parseInt("1111", 2); parseInt("15*3", 10); parseInt("15e2", 10); parseInt("15px", 10); parseInt("12", 13);
Все следующие примеры возвращают NaN
:
parseInt("Hello", 8); // Не является числом parseInt("546", 2); // Неверное число в двоичной системе счисления
Все следующие примеры возвращают -15
:
parseInt("-F", 16); parseInt("-0F", 16); parseInt("-0XF", 16); parseInt(-15.1, 10) parseInt(" -17", 8); parseInt(" -15", 10); parseInt("-1111", 2); parseInt("-15e1", 10); parseInt("-12", 13);
Следующий пример возвращает 224
:
parseInt("0e0", 16);
Восьмеричная интерпретация без указания системы счисления
Хотя это не поощряется в спецификацией ECMAScript 3 и запрещено в ECMAScript 5, многие реализации интерпретируют числовую строку, начинающуюся с 0
, как восьмеричную. Следующий пример может иметь как восьмеричный, так и десятичный результат. Чтобы избежать непредвиденного результата, всегда указывайте основание системы счисления.
parseInt("0e0"); // 0 parseInt("08"); // 0, '8' не является цифрой в восьмеричной системе.
ECMAScript 5 устраняет восьмеричную интерпретацию
Спецификация ECMAScript 5 функции parseInt
больше не разрешает трактовать в восьмеричной системе счисления строки, начинающиеся с 0
. ECMAScript 5 провозглашает:
Функция parseInt
производит целочисленное значение в результате интерпретации содержимого строкового аргумента в соответствии с указанным основанием системы счисления. Пробел в начале строки не учитывается. Если основание системы счисления не определено или равно 0
, оно считается равным 10
, за исключением случаев, когда строка начинается с пар символов 0x
или 0X
: тогда за основание принимается 16. Если основанием системы счисления указано 16
, число также может начинаться с пар символов 0x
или 0X
.
В этом ECMAScript 5 расходится со спецификацией ECMAScript 3, в которой восьмеричная интерпретация не поощрялась, но и не была запрещена.
Поскольку на момент 2013 года описанное выше поведение было применено не во всех реализациях, а поддержка старых браузеров является необходимой, всегда указывайте основание системы счисления.
Более строгая функция интерпретации
Иногда необходим более строгий способ интерпретации целочисленных значений. В этом могут помочь регулярные выражения:
filterInt = function (value) { if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value)) return Number(value); return NaN; } console.log(filterInt('421')); // 421 console.log(filterInt('-421')); // -421 console.log(filterInt('+421')); // 421 console.log(filterInt('Infinity')); // Infinity console.log(filterInt('421e+0')); // NaN console.log(filterInt('421hop')); // NaN console.log(filterInt('hop1.61803398875')); // NaN console.log(filterInt('1.61803398875')); // NaN
Спецификация
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 1st Edition. | Стандарт | Изначальное определение. |
ECMAScript 5.1 (ECMA-262) Определение 'parseInt' в этой спецификации. |
Стандарт | |
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'parseInt' в этой спецификации. |
Стандарт |
Поддержка браузерами
Особенность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) |
Особенность | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |