Ссылка на всю память JavaScript, но не в традиционном смысле.Память ссылается не по адресу памяти, а по строке.В этом коде:
var x = new someObj();
На этот объект ссылается строка "x" с этой точки вперед.x не является указателем на некоторую память в куче в этой точке.Если вы присвоили свойство xa, то:
x.someProp = 42;
Тогда someProp - это строка в памяти, ссылающаяся на значение 42. Следовательно, это позволяет использовать запись массива для доступа к нему по строковому представлению:
x["someProp"]++;
Именно поэтому переменные могут содержать любое значение, поскольку им не нужен размер.
Память собирается в JavaScript, по сути, когда на нее не ссылаются строки (имена переменных или свойств).Этот объект будет собран, когда x присваивается любое другое значение.Вы можете установить его на null
, undefined
или что-то еще, и эта память будет собираться.
То есть она будет собираться, когда браузер или любой другой движок JavaScript обойдут ее.
Удалить только удаляет свойства из объектов.После этого попытка получить доступ к этому свойству вернет undefined
.По большей части следующие 2 строки кода эквивалентны:
x["someProp"] = undefined;
delete x.someProp;
Редактировать: Хорошо, внутренне эти две строки не совпадают.Оператор удаления удалит ссылку «someProp» из памяти, а установка неопределенного значения - нет.Я думаю.Я не могу найти ничего в спецификациях о том, чтобы установить переменную или свойство в undefined, но я не думаю, что это делает что-то особенное.
Важно отметить, что вы не сможетеудалите свойства, для которых установлен определенный флаг, но вы можете установить для них значение null или undefined (если они не упакованы установщиком и даже позволяют этому происходить).