Удаление объектов в JavaScript - PullRequest
347 голосов
/ 13 апреля 2009

Я немного запутался с оператором JavaScript delete. Возьмите следующий кусок кода:

var obj = {
    helloText: "Hello World!"
};

var foo = obj;

delete obj;

После того, как этот фрагмент кода был выполнен, obj равен null, но foo по-прежнему ссылается на объект в точности как obj. Я предполагаю, что этот объект является тем же объектом, на который foo указал.

Это смущает меня, потому что я ожидал, что запись delete obj удалит объект, на который obj указывает в памяти, а не только переменную obj.

Это потому, что сборщик мусора в JavaScript работает на основе сохранения / выпуска, поэтому, если бы у меня не было других переменных, указывающих на объект, он был бы был бы удален из памяти?

(Кстати, мое тестирование проводилось в Safari 4.)

Ответы [ 12 ]

0 голосов
/ 26 июня 2016

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

 for (element in homeService) {
          delete homeService[element];
0 голосов
/ 18 сентября 2014

Установка переменной на null гарантирует разрыв всех ссылок на объекты во всех браузерах, включая циклические ссылки между элементами DOM и областями Javascript. Используя команду delete, мы помечаем объекты, подлежащие очистке при следующем запуске сборки мусора, но если существует несколько переменных, ссылающихся на один и тот же объект, удаление одной переменной НЕ БУДЕТ освободить объект, оно просто удалит связь эта переменная и объект. И при следующем запуске сборки мусора будет очищена только переменная.

...