Jestem programistą C/C++/Java pracującym z JavaScript.JavaScript 'delete' nie działa w pętli iteracyjnej
Próbuję napisać funkcję, która usunie wszystkie właściwości obiektu "obj". Przeczytałem wpis na "How to quickly clear a Javascript Object?" i zobaczyłem, że są dwie odpowiedzi: (1) tworzenie nowego "obiektu" (którego nie chcę robić, ponieważ mój kod jest programem o wysokiej wydajności działającym w przeglądarce mobilnej i chcę zminimalizować odśmiecanie); i (2) iterowanie po właściwościach obiektu w pętli i usuwanie właściwości. To ostatnie podejście nie działa w Chrome 12.
Rozważmy następujący kod:
var foo = {};
foo['baz'] = 'bar';
console.log("1. foo.baz = " + foo.baz);
delete foo.baz;
console.log("2. foo.baz = " + foo.baz);
foo['baz'] = 'bar';
console.log("3. foo.baz = " + foo.baz);
for (prop in foo)
{
if (foo.hasOwnProperty(prop))
{
console.log("deleting property " + prop);
delete foo.prop;
}
}
console.log("4. foo.baz = " + foo.baz);
To daje następujący wynik w mojej konsoli w Chrome 12:
1. foo.baz = bar
2. foo.baz = undefined
3. foo.baz = bar
deleting property baz
4. foo.baz = bar
Dlaczego nie foo.baz zostanie usunięty w pętli?
(1) Miałem wrażenie, że notacja właściwości foo.prop i foo [prop] są równoważne, na przykład jak wspomniano w http://www.jibbering.com/faq/faq_notes/square_brackets.html. (2) Dlaczego "delete foo.baz" działa w moim przykładzie? (3) Jak już wspomniałem, chcę zminimalizować usuwanie śmieci, ponieważ pracuję w przeglądarce mobilnej. – stackoverflowuser2010
'foo.prop' jest równoważne' foo ["prop"] '. Zobacz różnicę? Jeśli chcesz dynamicznie pobierać własność z 'foo', musisz użyć' foo [prop] '. – digitalbath
@ stackoverflowuser2010: Powiedziałbym więcej wiary w GC. Jeśli nie tworzysz mnóstwa obiektów przy każdym kliknięciu, powinieneś być w porządku. Jawne usunięcie wszystkich właściwości, a następnie dodanie nowych może zająć więcej czasu niż tylko utworzenie nowego i pozostawienie starego do GC! – delnan