Побочный эффект оператора «delete» в JavaScript
Как говорится «век живи, век учись, дураком помрёшь»:
Объяснение (по крайней мере для Хрома) очень простое: когда вы делаете delete testedObject[i].obj, V8 нормализует объект testedObject[i] — трансформирует его из быстрого компактного представления в медленное и раздутое представление на основе словаря, который еще и выделяется с запасом по размеру. При этом V8 не замечает, что после удаления в словаре будет пусто — и словарь (800 байтов) остается болтаться в воздухе. И так для каждого из ваших объектов.
Из коментария к статье на «Хабре», которая описывает странный эффект — при использовании оператора delete
Комментарии 2
«когда вы делаете
var cur = testedObject[i];
delete cur.obj
V8 нормализует объект cur — трансформирует его из быстрого компактного представления в медленное и раздутое представление на основе словаря. При этом V8 не замечает, что после удаления в словаре будет пусто — и словарь (800 байтов) остается болтаться в воздухе.»?
Или иначе:
«когда вы делаете
var cur = {obj: {}, value: 55, sign: „5vvsgggs“};
testedObject[i] = cur;
delete cur.obj
V8 нормализует объект cur… При этом V8 не замечает, что после удаления в словаре будет пусто»
Нас не запутаешь! У меня все ходы записаны! Вместо *delete testedObject[i]*
Ну так в исходной статье на Хабре речь и идёт o testedObject[i].obj.