@fleshik

Почему при изменении объекта он не меняется в массиве?

let obj= {
    name:"object"
};

let arrq = [obj]
 
obj = null;
 
 console.log(obj);
 console.log(arrq[0]);

Подскажите почему когда изменяется объект то как элемент массива он не меняется почему console.log(arrq[0]) НЕ null
  • Вопрос задан
  • 120 просмотров
Решения вопроса 2
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Вот это переменная:
let obj
А вот это сам объект:
{
    name:"object"
}

Соответственно вот тут:
obj = null
Присваивается значение переменной, а не объекту.
Ответ написан
@rPman
проводи эксперименты дальше, например obj.name="asd" изменит объект в массиве arr

переменная obj содержит не сам объект а ссылку на него, точно так же ссылку на него помещаешь в arr[0]

объект должен умереть автоматически если его ссылку никто не сохранит

p.s. за отсутствие многих вещей по контролю над объектами мне javascript и не нравится, с другой стороны меньше возможностей выстрелить в ногу
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Lynn
@Lynn
nginx, js, css
TL;DR: ты путаешь объекты и ссылки на объекты.

Если придумывать как я люблю разные аналогии, то представим что объект это воздушный шар, а ссылка на объект это канат который привязывает этот шар к земле (или другим шарам).

Ты создал новый воздушный шар { name:"object" } и привязал его канатом с биркой obj к земле (obj = ...).
Потом ты привязал ещё один канат с биркой arrq[0] к этому же шару (arrq = [obj]).
А потом отвязал канат obj (obj = null).
При этом канат arrq[0] никуда не делся и всё так же привязан к шару.

Мне эта аналогия нравится ещё тем, что когда ты отвяжешь последний канат связывающий воздушный шар с землёй (например напишешь arrq[0] = null), то он улетит и в конце концов где-то упадёт и пропадёт (сработает сборщик мусора).
Ответ написан
Комментировать
Kentavr16
@Kentavr16
long cold winter
потому что объект присваивается по ссылке а не по значению. Ты вроде как наклеил два ярлыка на коробку, потом оторвал первый. Конечно же второй ярлык как и коробка останется.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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