parseInt()

Эта статья нуждается в редакционном обзоре. Как вы можете помочь.

Сводка

Функция parseInt() принимает строку в качестве аргумента и возвращает целое число в соответствии с указанным основанием системы счисления.

Синтаксис

parseInt(string, radix);

Параметры

string
Значение, которое необходимо проинтерпретировать. Если значение параметра string не принадлежит строковому типу, оно преобразуется в него. Пробелы в начале строки не учитываются.
radix
Целое число в диапазоне между 2 и 36, представляющее собой основание системы счисления числовой строки, описанной выше. Всегда указывайте этот параметр, чтобы исключить ошибки считывания и гарантировать корректность исполнения. Когда основание системы счисления не указано, разные реализации могут возвращать разные результаты.

Описание

Функция parseInt преобразует первый переданный ей аргумент в строковый тип, интерпретирует его и возвращает целое число или значение NaN. Результат (если не NaN) является представлением первого аргумента (рассматривающегося как число в указанной системе счисления) в виде десятичного целого. Например, основание 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 не является числом в какой-либо системе счисления. Чтобы определить, вернет ли parseFloat значение 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
Базовая поддержка (Да) (Да) (Да) (Да) (Да) (Да)

Смотри также

Метки документа и участники

 Внесли вклад в эту страницу: KTatyana, Acknowhow, oshilan, raspberry59
 Обновлялась последний раз: KTatyana,