← Назад к вопросам

Как строка преобразуется в число?

2.2 Middle🔥 201 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

В JavaScript преобразование строки в число — фундаментальная операция, которая выполняется несколькими способами, каждый со своей семантикой и особенностями.

Основные методы преобразования

1. Явное приведение типов с Number()

Конструктор Number() — самый прямой и строгий способ. Он пытается преобразовать всю строку целиком.

Number("123");        // 123
Number("12.34");      // 12.34
Number("123abc");     // NaN (Not a Number)
Number("");           // 0
Number("  123  ");    // 123 (пробелы обрезаются)
Number("Infinity");   // Infinity

Особенности:

  • Возвращает NaN при любой некорректной числовой строке
  • Пустая строка и строка из пробелов преобразуются в 0
  • Чувствителен к начальным/конечным пробелам

2. Унарный плюс (+)

Самый краткий и часто используемый способ в современном коде.

+"123";        // 123
+"12.34";      // 12.34
+"123abc";     // NaN
+"";           // 0
+"  123  ";    // 123

3. parseInt() для целых чисел

Парсит строку до первого нечислового символа, возвращает целое число.

parseInt("123");        // 123
parseInt("123.95");     // 123 (дробная часть отбрасывается)
parseInt("123abc");     // 123 (парсит до "abc")
parseInt("abc123");     // NaN (не начинается с числа)
parseInt("10", 2);      // 2 (бинариная система)
parseInt("0xF");        // 15 (шестнадцатеричная система)

Важные нюансы:

  • Второй параметр — система счисления (от 2 до 36)
  • Без указания системы счисления может неожиданно парсить 0x как hex
  • Современный подход: всегда указывать систему счисления

4. parseFloat() для чисел с плавающей точкой

Аналогичен parseInt(), но сохраняет дробную часть.

parseFloat("123.45");    // 123.45
parseFloat("123.45abc"); // 123.45
parseFloat("abc123.45"); // NaN
parseFloat("1.23e4");    // 12300 (научная нотация)

Неявное преобразование

JavaScript часто преобразует строки в числа автоматически в математических операциях (кроме +):

"10" - 5;     // 5 (строка преобразуется в число)
"10" * "2";   // 20 (обе строки преобразуются)
"10" / "2";   // 5
"10" + 5;     // "105" (конкатенация строк!)

Сравнение производительности и рекомендации

Бенчмарки (от быстрого к медленному):

  1. Унарный плюс +str — самый быстрый
  2. Number(str) — немного медленнее, но более явный
  3. parseInt()/parseFloat() — самые медленные, но с дополнительной логикой

Рекомендации по использованию:

  • Для строгого преобразования целой строки используйте Number() или +
  • Для парсинга чисел из смешанных строкparseInt()/parseFloat()
  • Всегда указывайте систему счисления для parseInt()
  • Для дробных чисел предпочитайте parseFloat() или Number()
  • Избегайте неявного преобразования в продакшн-коде — оно менее читаемо

Обработка edge-кейсов

// Особые случаи
Number(null);         // 0
Number(undefined);    // NaN
Number(true);         // 1
Number(false);        // 0

// Большие числа
Number("1e308");      // 1e308
Number("1e309");      // Infinity

// Нули
Number("0");          // 0
Number("-0");         // -0

Современные подходы (ES6+)

// Проверка на "безопасность" числа
Number.isSafeInteger(Number("9007199254740991")); // true
Number.isSafeInteger(Number("9007199254740992")); // false

// Более строгая проверка
const safeConvert = (str) => {
  const num = Number(str);
  return Number.isFinite(num) ? num : null;
};

Выбор метода зависит от конкретной задачи: нужна ли вам целочисленная или дробная часть, как обрабатывать некорректные данные, важна ли производительность. В большинстве случаев Number() или унарный плюс — оптимальный выбор для явного преобразования.