> Что происходит при сложении двух пустых массивов в JavaScript (JavaScript)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех, Avito
Стек: JavaScript
> Пример ответа
Короткий ответ
При сложении двух пустых массивов [] + [] в JavaScript результатом будет пустая строка "". Это происходит из-за того, что оператор + при работе с массивами вызывает их преобразование в примитивы через метод toString(), который для пустого массива возвращает пустую строку. Затем происходит конкатенация двух пустых строк.
Подробное объяснение
Оператор + в JavaScript выполняет либо численное сложение, либо строковую конкатенацию. Когда хотя бы один операнд не является числом, JS пытается преобразовать оба операнда в примитивы. Для массивов алгоритм следующий:
- Вызывается метод
valueOf(), который для массивов возвращает сам массив (не примитив). - Затем вызывается метод
toString(), который для массива возвращает строку из элементов, разделённых запятыми. - Для пустого массива
[].toString()даёт пустую строку"". - После этого
"" + ""даёт"".
Это поведение определено спецификацией ECMAScript в алгоритме ToPrimitive и OrdinaryToPrimitive.
На практике
Этот кейс редко встречается в реальном коде, но понимание механизма преобразования типов важно для отладки неожиданного поведения. Например, при работе с формами или API, где данные могут приходить в виде массивов, и их неявное преобразование может привести к багам.
Пример кода
JAVASCRIPTconsole.log([] + []); // ""// Для сравнения:console.log([1] + [2]); // "12"console.log([1, 2] + [3, 4]); // "1,23,4"console.log([] + {}); // "[object Object]"console.log({} + []); // 0 (в некоторых контекстах)
Как отвечать на собеседовании
Начни с конкретного ответа: "". Затем объясни механизм преобразования типов через ToPrimitive и toString(). Упомяни, что это частный случай более общего правила работы оператора + с нечисловыми типами. Если спросят про другие комбинации, покажи понимание разницы между [] + {} и {} + [].
Что проверяет интервьюер
- Понимание механизма преобразования типов в JavaScript
- Знание работы оператора
+и его перегрузки - Осведомлённость о методах
valueOf()иtoString()для объектов - Умение предсказывать результат неявных преобразований
Типичные ошибки
- Ожидание
0илиundefinedвместо пустой строки - Путаница с поведением
{} + [], где{}может интерпретироваться как блок кода - Незнание, что
toString()для массива работает именно так - Предположение, что массивы складываются как числа или объединяются поэлементно
> Похожие задачи по frontend
Как работает callback в методе map в JavaScript и что означают его аргументы
Из каких этапов состоит событийный цикл JavaScript
Как работает прототипное наследование в JavaScript?
Использовали ли кастомные парсеры для преобразования JSON в объекты на уровне бизнес-логики
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью