> Что происходит при сложении двух пустых массивов в JavaScript (JavaScript)

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

Компании: Иннотех, Avito

Стек: JavaScript

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

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

При сложении двух пустых массивов [] + [] в JavaScript результатом будет пустая строка "". Это происходит из-за того, что оператор + при работе с массивами вызывает их преобразование в примитивы через метод toString(), который для пустого массива возвращает пустую строку. Затем происходит конкатенация двух пустых строк.

Подробное объяснение

Оператор + в JavaScript выполняет либо численное сложение, либо строковую конкатенацию. Когда хотя бы один операнд не является числом, JS пытается преобразовать оба операнда в примитивы. Для массивов алгоритм следующий:

  1. Вызывается метод valueOf(), который для массивов возвращает сам массив (не примитив).
  2. Затем вызывается метод toString(), который для массива возвращает строку из элементов, разделённых запятыми.
  3. Для пустого массива [].toString() даёт пустую строку "".
  4. После этого "" + "" даёт "".

Это поведение определено спецификацией ECMAScript в алгоритме ToPrimitive и OrdinaryToPrimitive.

На практике

Этот кейс редко встречается в реальном коде, но понимание механизма преобразования типов важно для отладки неожиданного поведения. Например, при работе с формами или API, где данные могут приходить в виде массивов, и их неявное преобразование может привести к багам.

Пример кода

JAVASCRIPT
console.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() для массива работает именно так
  • Предположение, что массивы складываются как числа или объединяются поэлементно

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

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