JavaScript не поддерживает delete
, примененный к объектам - это синтаксическая ошибка, как опубликовано. Оператор удаления в JavaScript применяется только для удаления именованного свойства из объекта. Тип и значение свойства не имеют значения.
Следовательно
let a= [{}];
delete a[0];
удаляет свойство с именем «0» из a
. Анонимный объект, который был сохранен в массиве, больше не имеет ссылок в коде и будет собираться GC.
Но
let a = [{}];
for (let o of a) {
delete o;
}
- это синтаксическая ошибка , сгенерированная неверным выражением delete
- имя свойства не предусмотрено для удаления.
И это, как ожидается, o является копией.
может все еще намекает на C ++. Значения данных объекта в JavaScript являются ссылками на структуру данных объекта. Это может быть указатель памяти, но это будет полностью зависеть от движка JavaScript.
Язык не предоставляет средства доступа к внутреннему значению ссылки / указателя или выполнения каких-либо операций с адресами над ним. Скопированное значение объекта будет относиться к той же структуре данных, что и значение, из которого оно было скопировано.
Манипуляции со свойствами объекта могут быть выполнены с любой ссылкой или скопированной ссылкой на него. Также следует отметить, что объекты JavaScript не поддерживают деструкторы. Ресурсы памяти объекта могут быть восстановлены GC, когда никакой доступный код все еще не может получить к нему доступ.