2013-03-03 13 views
7

Jak stwierdzono Here Wygląda na to, że najbardziej skutecznym sposobem, aby opróżnić istniejącą tablicę (a NIE przydzielić nowy) w javascript jest użycie:Jaki jest najbardziej efektywny sposób na opróżnienie zwykłego obiektu w javascript?

array.length = 0; 

Czy tę samą pracę pracy dla zwykłych przedmiotów? (alias "tablice asocjacyjne" lub "słowniki") Jeśli nie, jaki jest najskuteczniejszy sposób, aby opróżnić istniejący obiekt javascript?

Myślę, że przydzielenie nowego nie jest najlepszą opcją, ponieważ spowoduje to dodatkowe obciążenie dla odśmiecacza i przydzieli trochę nowej pamięci na stercie, ale mogę się mylić.

Potrzebuję rozwiązania, które działa przynajmniej w Chrome i Firefox.

+0

Nie wygląda. Długość = 0 działa dla tablic asocjacyjnych (http://jsfiddle.net/7XVym/). – awbergs

+3

JS nie ma tablic asocjacyjnych. Masz na myśli obiekty? –

+0

Nie możesz po prostu zrobić 'tablica = null;'? – insertusernamehere

Odpowiedz

22

Najkrótszym sposobem na to jest utworzenie nowego obiektu. Ostatecznie skończyłoby się wyrzucanie śmieci i zbieranie wszystkich nieruchomości.

var foo = { 
    a: 5, 
    b: 4 
}; 
foo = {}; 

Można również iteracyjne nad właściwościami i usunąć je indywidualnie:

for (var prop in foo) { 
    if (foo.hasOwnProperty(prop)) { 
     delete foo[prop]; 
    } 
} 

Warto również zwrócić uwagę, jako przedmiot verbiage, że JavaScript ma obiektów z właściwości, nie tablice asocjacyjne.

+3

Należy zauważyć, że 'foo = {}' tworzy nowy obiekt i ** pozostawia oryginalny obiekt w postaci **. To robi różnicę, gdy istnieją inne odniesienia do oryginalnego obiektu: 'var foo = {a: 5, b: 4}; var bar = foo; foo = {}; ' Na końcu' bar' jest nadal '{a: 5, b4}' i ** nie ** '{}' jak można się spodziewać. – Ignitor

Powiązane problemy