Вопрос проверяет понимание правил автоматического преобразования типов данных в JavaScript при выполнении арифметических операций, что необходимо для избежания неожиданных ошибок.
Неявное преобразование типов (type coercion) — это автоматический процесс в JavaScript, который пытается привести операнды к совместимому типу, когда операция применяется к значениям разных типов. Это особенно важно в арифметических операциях, где поведение зависит от используемого оператора и типов операндов.
Оператор + уникален, потому что он перегружен: он работает и как сложение чисел, и как конкатенация строк. Если хотя бы один операнд является строкой, происходит конкатенация, и второй операнд неявно преобразуется в строку.
console.log(5 + '5'); // '55' (число 5 преобразовано в строку '5')
console.log('Hello, ' + 2024); // 'Hello, 2024'
console.log(true + ' is true'); // 'true is true' (boolean true преобразован в строку 'true')Если ни один операнд не является строкой, JavaScript пытается преобразовать оба операнда в числа и выполнить сложение.
console.log(true + false); // 1 (true -> 1, false -> 0)
console.log(null + 10); // 10 (null -> 0)
console.log(undefined + 10); // NaN (undefined -> NaN)Для операторов вычитания, умножения, деления и остатка от деления оба операнда всегда приводятся к числам, если это возможно.
console.log('10' - 5); // 5 (строка '10' преобразована в число 10)
console.log('10' * '2'); // 20 (обе строки преобразованы в числа)
console.log('abc' / 2); // NaN (строка 'abc' не может быть преобразована в число)
console.log('5' % '2'); // 1 (обе строки преобразованы в числа)Понимание неявного преобразования критично при обработке пользовательского ввода (который часто приходит как строка), вычислениях в финансовых приложениях и при отладке неожиданного поведения. Например, получение значения из поля ввода input.value всегда возвращает строку, и прямое использование его в формуле может дать неверный результат.
// Плохо: может произойти конкатенация вместо сложения
const price = document.getElementById('price').value; // строка, например '100'
const tax = 20;
const total = price + tax; // '10020' - ошибка!
// Хорошо: явное преобразование
const totalCorrect = Number(price) + tax; // 120Вывод: Неявное преобразование типов — мощный, но опасный механизм. Для написания надёжного кода рекомендуется использовать явное преобразование (например, Number(), String(), parseInt()) там, где типы могут быть неочевидны, особенно при работе с пользовательскими данными или внешними API.