> Какие подводные камни есть при использовании ссылочных типов в JavaScript кроме сравнения (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: ООО Снэп АйТи
Стек: JavaScript
> Пример ответа
При использовании ссылочных типов (объектов, массивов, функций) в JavaScript есть несколько неочевидных проблем помимо сравнения:
-
Мутация через копирование ссылки - при присваивании объекта новой переменной обе ссылки указывают на один и тот же объект. Изменение через одну переменную влияет на другую, что часто приводит к багам в иммутабельных подходах (например, в React-состоянии).
-
Побочные эффекты при передаче в функции - объекты передаются по ссылке, поэтому изменение параметра внутри функции модифицирует исходный объект. Это неочевидно для разработчиков, привыкших к примитивам.
-
Проблемы с глубоким копированием - поверхностное копирование (
Object.assign, spread-оператор) не клонирует вложенные объекты. Для глубокого копирования нужны рекурсивные решения илиstructuredClone(), который не поддерживает функции и некоторые типы. -
Неожиданное поведение с
const-constзащищает только от переприсваивания ссылки, но не от изменения свойств объекта.const obj = {}; obj.key = 1;- это допустимо. -
Утечки памяти через замыкания - ссылочные типы, захваченные замыканием, не удаляются сборщиком мусора, пока существует функция, что может привести к утечкам в долгоживущих приложениях.
-
Проблемы с сериализацией - объекты с циклическими ссылками или специальными типами (Map, Set, Date) некорректно сериализуются через
JSON.stringify, что вызывает ошибки при передаче данных. -
Неявное приведение к строке - при конкатенации с примитивами объекты преобразуются в
[object Object], что часто маскирует ошибки в шаблонных строках.
> Похожие задачи по frontend
В чем отличие контекста в строгом режиме и без него в JavaScript
Что происходит с функцией в Map, пока на Map есть ссылка в JavaScript
Как реализовать функцию-обертку runOnce в JavaScript, вызывающую функцию только один раз?
Какой числовой формат даты подходит для сравнения объектов Date в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью