Jak rychle vymazat objekt JavaScriptu?

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).

  1. V tomto příkladu se domnívám, že nastavení délky na 0 stále ponechá všechny prvky pro sběr odpadu.

  2. 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.

  3. 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.