. Возьмем следующий фрагмент кода: delete После того, как этот фрагмент кода был выполнен,

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

var foo = obj;

delete obj;

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

в предыдущем аргументе, кажется, не иметь никакого эффекта, но вам нужен какой-то аргумент, чтобы delete obj указывал в памяти, а не только на переменную obj Это потому, что сборщик мусора в JavaScript работает на основе сохранения / выпуска, так что если у меня не было других переменных, указывающих к объекту, он obj Глядя на вывод

будет удален из памяти? я использовал: чтобы объединить массив и создать строку для сравнения. Для сложных сценариев, чем этот пример, вы можете использовать какой-то другой разделитель. (Кстати, мое тестирование проводилось в Safari 4.)

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

Поскольку Javascript собирает мусор, вам не нужно удалять сами объекты — они будут удалены, когда на них больше нельзя будет ссылаться. Команда

не влияет на обычные переменные, только на свойства. После команды

Может быть полезно удалить ссылки на объект, если вы покончили с ними, потому что это дает сборщику мусора больше информации о том, что можно восстановить. Если ссылки остаются на большой объект , это может привести к тому, что он станет невостребованным — даже если остальная часть вашей программы на самом деле не использует этот объект.

Переменная delete свойство не имеет значения delete, оно вообще не существует. null Если свойство является ссылкой на объект, команда

удаляет свойство, но не объект. Сборщик мусора позаботится об объекте, если у него нет других ссылок на него. delete (Протестировано в Firefox.)

Пример:

var x = new Object();
x.y = 42;

alert(x.y); // shows '42'

delete x; // no effect
alert(x.y); // still shows '42'

delete x.y; // deletes the property
alert(x.y); // shows 'undefined'

«Переменные, объявленные неявно» — это свойства глобального объекта, поэтому delete работает с ними так же, как и с любым свойством. Переменные, объявленные с помощью var, неразрушимы.

Исходя из документации Mozilla: «Вы можете использовать оператор удаления для удаления переменных, объявленных неявно, но не тех, которые объявлены с помощью оператора var.»

Вот ссылка:

https: //developer.mozilla. org / En / Core_JavaScript_1.5_Reference: Операторы: Special_Operators: delete_Operator на основе ответа @Guffa. Я обнаружил, что следующий метод работает для меня:

Установив obj сначала

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

obj = null;

delete obj;

, вы удалили всю ссылку на него, а затем можете полностью удалить его. null Я не тестировал его в другом браузере, но это работает в phonegap 1.7.0

не используется для удаления объекта в Java Script.

delete используемый для удаления

delete в вашем случае object key объект не удален, проверьте, что obj по-прежнему принимает те же значения

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

, а затем проверьте удаления:

delete obj.helloText

, оба являются пустыми объектами. obj, foo jsperf

Только что обнаружил Вы можете посчитать интересным в свете этого вопроса. (это может быть удобно, чтобы сохранить его для завершения картины) Он сравнивает

delete , настройку и настройку Как насчет использования ассоциативных массивов? undefined , но имейте в виду, что он проверяет случай, когда Вы удаляете / устанавливаете свойство много раз. Глядя на вывод

Помимо вопросов GC, для повышения производительности следует учитывать оптимизацию, которую браузер может выполнять в фоновом режиме — & Gt ;

http://coding.smashingmagazine.com/2012 / 11/05 / writing-fast-memory -ffective-javascript /

Похоже, может быть лучше обнулить ссылку, чем удалить ее, поскольку это может изменить закулисный «класс», используемый Chrome.

В IE 5–8 есть ошибка, когда при использовании delete для свойств хост-объекта (Window, Global, DOM и т. Д.) Выдается TypeError «объект не поддерживает это действие».

Позже, если вам нужно проверить, где свойство имеет полное значение, используйте

var el=document.getElementById("anElementId");
el.foo = {bar:"baz"};
try{
    delete el.foo;
}catch(){
    //alert("Curses, drats and double double damn!");
    el.foo=undefined; // a work around
}

Позже, если вам нужно проверить, где свойство имеет полное значение, используйте el.foo !== undefined, потому что "foo" in el всегда будет возвращать true в IE.

Если вам действительно нужно, чтобы свойство действительно исчезло …

function hostProxy(host){
    if(host===null || host===undefined) return host;
    if(!"_hostProxy" in host){
       host._hostproxy={_host:host,prototype:host};
    }
    return host._hostproxy;
}
var el=hostProxy(document.getElementById("anElementId"));
el.foo = {bar:"baz"};

delete el.foo; // removing property if a non-host object

если вам нужно использовать объект host с host api …

el.parent.removeChild(el._host);

Я наткнулся на эту статью в поисках того же ответа. В итоге я просто извлек obj.pop() все сохраненные значения / объекты в моем объекте, чтобы я мог повторно использовать этот объект. Не уверен, если это плохая практика или нет. Этот метод пригодился мне для тестирования моего кода с помощью инструментов Chrome Dev или FireFox Web Console.

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

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

 for (element in homeService) {
          delete homeService[element];