TGViewer
ТОП - Тёма о программировани ТОП - Тёма о программировани @temaprog · 2.81K subscribers
Post #18 1.45K
Мутанты
#Фронтенд

Здарова, работяги!

В js существует страшилка, что нельзя мутировать объекты. Ей пугают новичков с самых первых шагов. Давайте с ней разбираться.

Почему она возникла? Какое-то время назад, когда качество js кода было сильно хуже чем сейчас я часто встречал в коде мутации объектов. В большинстве случаев мутации приводили к очень коварным багам. Прям оччччень противным. Чуть позже в js сообществе начала форситься тема о запрете мутации. И это оправдано, ведь в большинстве случаев мутация = говнокод.

Но все это привело к другой проблеме - полный отказ от мутации, совсем. Да, кто-то скажет это не проблема. Но я так не считаю. Сейчас очень активно, особенно новички, при каждой попытке изменить объект использует спред {...yourObject}. И многие воспринимают это прям как истинное добро и свет. Но есть проблема, операция {...yourObject} не отличается производительностью. Поэтому важно знать где нужно, а где ненужно мутировать. Это поможет избавиться от лишних спредов.

Самый популярный кейс избыточной иммутабильности это создание объекта на основе массива с помощью reduce(reduceRight). Большинства используют его как-то так:
array.reduce((acc, element) => ({ ...acc, [element.id]: element }), {})
Если остановиться и проанализировать этот код, то мы пытаемся спасти от мутации объект, который еще нигде не используется. Тк при запуске такого кода последовательность следующая: создание нового объекта => заполнение его свойств => складываем ссылку на него в переменную => потом где-то используем.

Важно! Мутация опасно тогда, когда объект мутирует после того, как кто-то начал его использовать, кто-то уже получит ссылку на него. В нашем же примере новый объект будет мутироваться до использования, а это полностью безопасно. Пример без спреда на скрине.
  • 🔥 15
  • 👍 2
More from @temaprog
  1. Sep 15, 2026Здарова, работяги! Кто собирается на Avito.Tech.Conf 26 сентября? Я уже рассказывал про ко…
  2. Sep 14, 2026Зачем ты пишешь? Здарова, работяги! Помню, как все только начинали активно использовать аг…
  3. Sep 4, 2026Здарова, работяги! Приезжает коробка. Внутри бейдж на Avito.Tech.Conf и часы «Ракета».😳 И…
  4. Sep 3, 2026Здарова, работяги! Потихоньку продолжаю дописывать посты из заметок. В прошлый раз — элеме…
  5. Aug 26, 2026Здарова, работяги! Совсем скоро осень, а значит, начинается сезон конференций. Про Avito.T…
  6. Aug 18, 2026Здарова, работяги! Сейчас я много думаю про AI-native команды и внедрение ИИ в разработку.…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →