Как преобразовать строку в число (integer) в JavaScript: лучшие способы
Основные способы преобразования строки в число
В JavaScript есть несколько способов преобразовать строку в целое число. Рассмотрим самые популярные и надёжные из них.
1. Функция parseInt()
Это классический способ. parseInt() разбирает строку и возвращает целое число. Важная особенность: он игнорирует нечисловые символы после цифр, но останавливается на первом недопустимом символе.
let str = "42px";
let num = parseInt(str);
console.log(num); // 42
let str2 = " 10 ";
let num2 = parseInt(str2);
console.log(num2); // 10 (пробелы игнорируются)
let str3 = "abc123";
let num3 = parseInt(str3);
console.log(num3); // NaN (не число, так как строка начинается с буквы)
Важно: Всегда указывайте систему счисления (radix) вторым аргументом, особенно при работе с числами, начинающимися с нуля:
let str4 = "010";
let num4 = parseInt(str4, 10); // 10 (десятичная система)
let num5 = parseInt(str4); // 8 в старых браузерах (восьмеричная система)
2. Унарный плюс (+)
Самый короткий и часто используемый способ. Преобразует строку в число, но строго — если строка содержит нецифровые символы, вернёт NaN.
let str = "123";
let num = +str;
console.log(num); // 123
let str2 = "42.5";
console.log(+str2); // 42.5 (число с плавающей точкой)
let str3 = "123abc";
console.log(+str3); // NaN
3. Функция Number()
Работает аналогично унарному плюсу, но более явно показывает намерение.
let str = "256";
let num = Number(str);
console.log(num); // 256
let str2 = " 99 ";
console.log(Number(str2)); // 99
let str3 = "99.9";
console.log(Number(str3)); // 99.9
Что выбрать?
- Если вы точно знаете, что строка содержит только целое число — используйте
+strилиNumber(str). Это быстро и читаемо. - Если строка может содержать посторонние символы после числа (например, "100px") — используйте
parseInt(str, 10). - Если строка может быть пустой или содержать только пробелы — помните, что
parseIntвернётNaN, а+""илиNumber("")вернёт0. Это может быть неожиданно.
Полный пример для вашей задачи
let age1 = "25";
let age2 = "30";
// Лучший способ для вашего случая:
let sum = parseInt(age1, 10) + parseInt(age2, 10);
console.log(sum); // 55
// Альтернатива:
let sum2 = +age1 + +age2;
console.log(sum2); // 55
Важные предостережения
- Всегда проверяйте результат на
NaNс помощьюisNaN()илиNumber.isNaN(). - Для дробных чисел используйте
parseFloat()или+. - Не используйте
parseIntбез указания системы счисления — это может привести к ошибкам в старых браузерах.
Надеюсь, это поможет! Если будут вопросы — спрашивайте.
<<Альтернативный подход: использование Math.floor() и ~~ (двойное побитовое НЕ)
Иногда в коде можно встретить экзотические способы преобразования. Рассмотрим два из них.
1. Math.floor() для чисел с плавающей точкой
Если вы уже получили число, но оно дробное, и вам нужно целое:
let str = "42.7";
let num = Math.floor(Number(str));
console.log(num); // 42 (отбрасывает дробную часть вниз)
Но помните: Math.floor() не преобразует строку в число сам — сначала нужно использовать Number() или +.
2. Двойное побитовое НЕ (~~)
Этот трюк работает только для 32-битных целых чисел (от -2^31 до 2^31-1):
let str = "123";
let num = ~~str;
console.log(num); // 123
let str2 = "42.9";
console.log(~~str2); // 42 (отбрасывает дробную часть)
let str3 = "10000000000"; // больше 2^31-1
console.log(~~str3); // 1410065408 (ошибка из-за переполнения)
Не рекомендуется использовать ~~ в production-коде, так как это ухудшает читаемость и может привести к неожиданным ошибкам при больших числах. Лучше использовать явные методы из первого ответа.