@zwezew

Мутации объекта js — как не стать ситхом?

Прочитал про ужасы мутаций в js.
Пример вида
const egg = { name: "Humpty Dumpty" };
egg.isBroken = false;

console.log(egg);


автор называет мутацией. Так же я читал, что мутацией является изменение объекта по ссылке (т.е. конкретно такой вид изменения).
До какой степени стоит возводить избегание мутаций до абсолюта?

Например, страшен ли этот пример, где объект изменяется напрямую?
const egg = { name: "Humpty Dumpty" };
egg.isBroken = false;

console.log(egg);


Или стоит избегать только тех вариантов, где объект изменяется не напрямую?
const egg = { name: "Humpty Dumpty" };

const newEgg = egg;
newEgg.name = "Errr ... Not Humpty Dumpty";


Или, например такой код

const obj1 = {
    val: true
}
const obj2 = {
    string: "string"
}
obj1 = obj2


Или, например, в реакт
const obj = this.props.item
obj.id = "newId1"

?
  • Вопрос задан
  • 1850 просмотров
Решения вопроса 2
Из мухи слона сделали.
Есть конкретные случаи, когда мутировать нельзя, нужно создавать новый, например если вы в редаксе будете мутировать стейт, у вас компоненты не увидят изменений, если вы детектите изменения по объекту, и надеетесь, что изменив часть его, ваш детектор сработает, тоже будет облом. Иногда бывает что вам нужен исходный объект, а вы его в процессе работы взяли и мутировали. Например, вам нужен для работы исходный массив объектов, вы фильтруете его, радуетесь тому что массив у вас новый, но забываете что объекты то в этом масиве старые, и мутируете их.

Сама по себе мутация не страшна совсем, более того, дешевле мутировать старый объект а не создавать на каждый чих новый и ждать когда старые сборщик соберет. Но как и везде в яваскрипте нужно много и продуктивно думать, нужно всегда знать чего ту мутируешь и какие будут последствия.

В реакте кстати, практически всегда мутировать нельзя
Ответ написан
Комментировать
Robur
@Robur
Знаю больше чем это необходимо
Не читайте до обеда всякой ерунды. Особенно статей как в вашей ссылке, написаных для драмы и пиара на пустом месте.
Если вы вообще задаетесь вопросом стоит ли избегать мутации - значит вам её избегать не стоит.
Мутируйте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы