> Какие подводные камни есть при использовании ссылочных типов в JavaScript кроме сравнения (JavaScript)

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

Компании: ООО Снэп АйТи

Стек: JavaScript

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

При использовании ссылочных типов (объектов, массивов, функций) в JavaScript есть несколько неочевидных проблем помимо сравнения:

  1. Мутация через копирование ссылки - при присваивании объекта новой переменной обе ссылки указывают на один и тот же объект. Изменение через одну переменную влияет на другую, что часто приводит к багам в иммутабельных подходах (например, в React-состоянии).

  2. Побочные эффекты при передаче в функции - объекты передаются по ссылке, поэтому изменение параметра внутри функции модифицирует исходный объект. Это неочевидно для разработчиков, привыкших к примитивам.

  3. Проблемы с глубоким копированием - поверхностное копирование (Object.assign, spread-оператор) не клонирует вложенные объекты. Для глубокого копирования нужны рекурсивные решения или structuredClone(), который не поддерживает функции и некоторые типы.

  4. Неожиданное поведение с const - const защищает только от переприсваивания ссылки, но не от изменения свойств объекта. const obj = {}; obj.key = 1; - это допустимо.

  5. Утечки памяти через замыкания - ссылочные типы, захваченные замыканием, не удаляются сборщиком мусора, пока существует функция, что может привести к утечкам в долгоживущих приложениях.

  6. Проблемы с сериализацией - объекты с циклическими ссылками или специальными типами (Map, Set, Date) некорректно сериализуются через JSON.stringify, что вызывает ошибки при передаче данных.

  7. Неявное приведение к строке - при конкатенации с примитивами объекты преобразуются в [object Object], что часто маскирует ошибки в шаблонных строках.

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

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