Learn JavaScript

parseInt() - функция для чтения целого числа из строки в JavaScript

parseInt() читает целое число из строки.

Это глобальная функция JavaScript. Она полезна, когда число нужно извлечь из начала строки, а не строго преобразовать всё значение целиком.

Синтаксис

parseInt(string)
parseInt(string, radix)

string - значение, из которого нужно прочитать число.

radix - основание системы счисления, например:

  • 10 для десятичной
  • 2 для двоичной
  • 16 для шестнадцатеричной

Что делает parseInt()

parseInt() идёт по строке слева направо и читает число, пока встречает подходящие символы.

console.log(parseInt("123", 10));   // 123
console.log(parseInt("42px", 10));  // 42
console.log(parseInt("3.14", 10));  // 3

Как только функция натыкается на неподходящий символ, чтение останавливается.

Что возвращает parseInt()

Если число удалось прочитать, parseInt() возвращает значение типа number.

Если не удалось, результатом будет NaN.

console.log(parseInt("123", 10)); // 123
console.log(parseInt("hello", 10)); // NaN
console.log(parseInt("", 10)); // NaN

Проверять NaN лучше через Number.isNaN():

const result = parseInt("hello", 10);

console.log(Number.isNaN(result)); // true

parseInt() читает только целую часть

Это важный момент.

console.log(parseInt("3.14", 10)); // 3
console.log(parseInt("15.99", 10)); // 15

parseInt() не округляет число, а просто останавливается перед точкой.

Пробелы в начале строки

Начальные пробелы игнорируются.

console.log(parseInt("   42", 10)); // 42

Если строка начинается не с числа

Если в начале строки нет подходящих цифр, результатом будет NaN.

console.log(parseInt("hello123", 10)); // NaN
console.log(parseInt("px42", 10));     // NaN

Почему radix лучше указывать явно

Второй аргумент лучше передавать почти всегда.

console.log(parseInt("123", 10)); // 123
console.log(parseInt("101", 2));  // 5
console.log(parseInt("ff", 16));  // 255

Это делает код понятнее и убирает лишние вопросы о том, в какой системе счисления читается строка.

Особый случай с 0x

Если radix не передан, parseInt() умеет распознавать шестнадцатеричную запись с префиксом 0x.

console.log(parseInt("0x10")); // 16

Но для двоичной и восьмеричной записи такого удобства уже нет:

console.log(parseInt("0b11")); // 0
console.log(parseInt("08"));   // 8

Поэтому правило простое: если основание важно, указывай radix явно.

parseInt() и Number()

Эти функции часто путают, но они работают по-разному.

console.log(parseInt("123px", 10)); // 123
console.log(Number("123px"));       // NaN

parseInt() читает число из начала строки.

Number() требует, чтобы вся строка целиком была корректным числом.

Ещё пример:

console.log(parseInt("3.14", 10)); // 3
console.log(Number("3.14"));       // 3.14

Если нужна строгая полная конвертация, чаще лучше подходит Number().

parseInt() и parseFloat()

parseInt() читает только целую часть.

parseFloat() умеет читать дробные числа.

console.log(parseInt("3.14", 10));   // 3
console.log(parseFloat("3.14"));     // 3.14

Поэтому выбор зависит от того, нужен ли результат именно целым числом.

parseInt() и нестроковые значения

Функция сначала приводит аргумент к строке, а потом пытается читать число.

console.log(parseInt(15.99, 10)); // 15
console.log(parseInt(true, 10));  // NaN
console.log(parseInt(null, 10));  // NaN

На практике parseInt() почти всегда используют именно со строками.

Недопустимый radix

Если radix меньше 2 или больше 36, результатом будет NaN.

console.log(parseInt("10", 1));  // NaN
console.log(parseInt("10", 37)); // NaN

Когда это полезно

parseInt() удобно использовать, когда:

  • нужно вытащить целое число из начала строки
  • в строке после числа могут идти другие символы
  • важно читать число в определённой системе счисления

Пример:

const width = "320px";
const value = parseInt(width, 10);

console.log(value); // 320

Частые ошибки

Забывать указывать radix

parseInt("101");

Такой код может работать, но обычно лучше писать явно:

parseInt("101", 10);

Думать, что parseInt() округляет

console.log(parseInt("3.99", 10)); // 3

Функция не округляет, а просто перестаёт читать строку на точке.

Путать parseInt() и Number()

console.log(parseInt("123px", 10)); // 123
console.log(Number("123px"));       // NaN

Они решают похожую задачу, но делают это по-разному.

Проверять NaN через ===

const value = parseInt("hello", 10);

console.log(value === NaN); // false

Для проверки нужен Number.isNaN().

Быстрая памятка

  • parseInt() читает целое число из начала строки
  • если чтение не удалось, результатом будет NaN
  • функция останавливается на первом неподходящем символе
  • radix обычно лучше указывать явно
  • parseInt() не округляет число, а читает только целую часть

Коротко

parseInt() - это удобный способ извлечь целое число из строки в JavaScript. Главное, что стоит запомнить: функция читает число только с начала строки, останавливается на первом неподходящем символе и почти всегда должна использоваться с явным radix.