Я программист на C/C++/Java, работающий с JavaScript.Javascript «delete» не работает внутри цикла итерации
Я пытаюсь написать функцию, которая удалит все свойства объекта 'obj'. Я прочитал сообщение на «How to quickly clear a Javascript Object?» и увидел, что есть два ответа: (1) создание нового «obj» (чего я не хочу делать, потому что мой код - это высокопроизводительная программа, работающая в мобильном браузере , и я хочу свести к минимуму сбор мусора); и (2) итерирование свойств объекта в цикле и удаление свойств. Этот последний подход не работает в Chrome 12.
Рассмотрим следующий код:
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);
В результате получается следующий результат в моей консоли на Chrome 12:
1. foo.baz = bar
2. foo.baz = undefined
3. foo.baz = bar
deleting property baz
4. foo.baz = bar
Почему не foo.baz удаляется внутри цикла?
(1) У меня создалось впечатление, что обозначения свойств foo.prop и foo [prop] эквивалентны, например, как указано в http://www.jibbering.com/faq/faq_notes/square_brackets.html. (2) Почему «delete foo.baz» работает в моем примере? (3) Как я уже упоминал, я хочу свести к минимуму сбор мусора, так как я работаю над мобильным браузером. – stackoverflowuser2010
'foo.prop' эквивалентно' foo ["prop"] '. увидеть разницу? Если вы хотите динамически вытащить свойство из 'foo', вам нужно использовать' foo [prop] '. – digitalbath
@ stackoverflowuser2010: Я добавил бы больше веры в GC. Если вы не создаете тонну объектов при каждом нажатии, вы должны быть в порядке. Явное удаление всех свойств, а затем добавление новых может занять больше времени, чем просто создать новый, и оставить старый в GC! – delnan