Я трохи плутаюся з delete
оператором JavaScript . Візьміть такий код:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
Після того, як цей фрагмент коду був виконаний, obj
є null
, але foo
все ще відноситься до об'єкта точно так само obj
. Я здогадуюсь, що цей об’єкт - той самий об’єкт, на який foo
вказували.
Це мене бентежить, тому що я очікував, що написання delete obj
видалить об’єкт, який obj
вказував на пам'ять, а не лише змінну obj
.
Це тому, що JavaScript Garbage Collector працює на основі збереження / випуску, так що, якщо б у мене не було жодних інших змінних, що вказували б на об'єкт, його було б видалено з пам'яті?
(До речі, моє тестування було зроблено в Safari 4.)
var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;
об’єкт не видалений перевірити obj
видалення використання: delete obj.helloText
а потім перевіритиfoo now foo is an empty object
delete
не для видалення об'єктів у javascript. delete
Використовується для видалення об'єктного ключа. У вашому випадку var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;
об'єкт не видаляється. Перевірте obj
. Далі, запустіть delete obj.helloText
і ви побачите, що foo
тепер вказує на порожнє об’єкт. "" "