Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Преобразование строки в число в 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" (конкатенация строк!)
Сравнение производительности и рекомендации
Бенчмарки (от быстрого к медленному):
- Унарный плюс
+str— самый быстрый Number(str)— немного медленнее, но более явный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() или унарный плюс — оптимальный выбор для явного преобразования.