Jestem trochę mylony z delete
operatorem JavaScript . Weź następujący fragment kodu:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
Po wykonaniu tego fragmentu kodu obj
jest null
, ale foo
nadal odnosi się do obiektu dokładnie takiego jak obj
. Zgaduję, że ten obiekt jest tym samym obiektem, który foo
wskazywał.
To mnie dezorientuje, ponieważ spodziewałem się, że pisanie delete obj
usunie obiekt obj
wskazany w pamięci - nie tylko zmienną obj
.
Czy to dlatego, że moduł czyszczenia pamięci JavaScript działa na zasadzie zatrzymania / wydania, więc jeśli nie miałbym żadnych innych zmiennych wskazujących na obiekt, zostałby on usunięty z pamięci?
(Nawiasem mówiąc, moje testy zostały wykonane w Safari 4.)
var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;
obiekt nie jest usuwany sprawdź obj
usuń użycie: delete obj.helloText
a następnie sprawdźfoo now foo is an empty object
delete
nie służy do usuwania obiektów w javascript. delete
Służy do usuwania klucza obiektu. W twoim przypadku var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;
obiekt nie jest usuwany. Sprawdź obj
. Następnie uruchom delete obj.helloText
i widać, że foo
teraz wskazuje na pusty obiekt. ”„ ”