Javascript "delete" не работает внутри цикла итерации - программирование

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 не удаляется внутри цикла?

4b9b3361

Ответ 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];

НТН