Pomocí pole JavaScript jej mohu resetovat do prázdného stavu s jediným přiřazením:
array.length = 0;
Tím se pole „zdá“ prázdné a připravené k opětovnému použití, a pokud jsem pochopil, je to jediná „operace“ – tedy konstantní čas.
Existuje podobný způsob, jak vyčistit objekt JS? Vím, že mohu iterovat jeho pole a vymazat je:
for (var prop in obj) { if (obj.hasOwnProperty(prop)) { delete obj[prop]; } }
ale to má lineární složitost.
Objekt také mohu jednoduše zahodit a vytvořit nový:
obj = {};
Ale „promiskuitní“ vytváření nových objektů vede k problémům s Garbage Collection na IE6. (Jak je popsáno zde)
Odpověď
Krátká odpověď na vaši otázku, myslím, je ne (stačí vytvořit nový objekt).
-
V tomto příkladu se domnívám, že nastavení délky na 0 stále ponechá všechny prvky pro sběr odpadu.
-
Můžete to přidat do Object.prototype, pokud je to něco, co často používáte. Ano, je to lineární ve složitosti, ale cokoli, co později neprovádí sběr odpadu, bude.
-
To je nejlepší řešení. Vím, že to nesouvisí s vaší otázkou – ale jak dlouho musíme pokračovat v podpoře IE6? Existuje mnoho kampaní, které jej přestávají používat.
Neváhejte mě opravit, pokud je výše něco nesprávného.