Javascript "delete" не работает внутри цикла итерации
Я программист на C/С++/Java, работающий с JavaScript.
Я пытаюсь написать функцию, которая удалит все свойства объекта 'obj'. Я прочитал сообщение о "Как быстро очистить объект Javascript?" и увидел, что есть два ответа: (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
Неправильный поиск key
. Вы должны использовать обозначение скобки:
delete foo[ prop ];
Однако вам не нужно перебирать каждое свойство внутри объекта. Это просто отлично для null
самой ссылки объекта. Сборщик мусора позаботится о вас.
foo = null; // done
Говоря о высокой производительности, это то, как вы хотите.
Ответ 2
Эта строка delete foo.prop
неверна. foo
в этом случае не имеет свойства с именем prop
. Использование скобок delete foo[prop]
.
Ответ 3
Потому что foo.prop
никогда не было определено для удаления. Вам нужно удалить его так:
delete foo[prop];
Ответ 4
Попробуйте это вместо:
delete foo[prop];
НТН