> Как избежать конкатенации чисел как строк в функции суммы аргументов в JavaScript? (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Газпромбанк

Стек: JavaScript

> Пример ответа

Проблема возникает, когда в функцию суммы передаются аргументы, которые JavaScript интерпретирует как строки, и оператор + выполняет конкатенацию вместо сложения. Чтобы избежать этого, нужно явно преобразовывать аргументы в числа перед суммированием.

Вот пример функции, которая корректно суммирует любые переданные аргументы, независимо от их типа:

JAVASCRIPT
function sum(...args) {
return args.reduce((acc, val) => {
const num = Number(val);
// Проверяем, является ли значение числом (включая 0)
if (!isNaN(num) && val !== null && val !== '') {
return acc + num;
}
// Если преобразование не удалось, можно выбросить ошибку или проигнорировать
// В данном случае игнорируем нечисловые значения
return acc;
}, 0);
}
// Примеры использования:
console.log(sum(1, '2', 3)); // 6
console.log(sum('10', '20', 30)); // 60
console.log(sum(1, 'abc', 2)); // 3 (игнорируем 'abc')

Ключевые моменты:

  • Используем Number(val) для приведения каждого аргумента к числу.
  • Проверяем результат через isNaN(), чтобы отсеять нечисловые значения (например, 'abc' или undefined).
  • Обрабатываем краевые случаи: null и пустую строку '', так как Number(null) даёт 0, а Number('') - 0, что может быть нежелательно.

Альтернативно, если нужно строго требовать числа и выбрасывать ошибку при невалидных данных:

JAVASCRIPT
function sumStrict(...args) {
return args.reduce((acc, val) => {
const num = Number(val);
if (isNaN(num) || val === null || val === '') {
throw new TypeError(`Invalid number: ${val}`);
}
return acc + num;
}, 0);
}

Таким образом, явное преобразование типов и проверка isNaN решают проблему конкатенации строк.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью