Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: type coercion, arithmetic operations, implicit conversion, JavaScript, number, string

Как работает неявное преобразование типов в JavaScript при арифметических операциях?

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

Короткий ответ

JavaScript автоматически преобразует значения разных типов в один тип перед выполнением арифметических операций. Для операторов +, -, *, /, % действуют разные правила. Оператор + может выполнять как сложение чисел, так и конкатенацию строк, что часто приводит к путанице. Для других арифметических операторов (-, *, /, %) операнды приводятся к числам. Значения null, undefined, true, false и пустые строки также преобразуются по специфичным правилам.

Длинный ответ

Неявное преобразование типов (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.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#type coercion

#arithmetic operations

#implicit conversion

#JavaScript

#number

#string

Подпишись на React Developer в телеграм