Ответ 1
стандарт ECMAScript 5.1, раздел 12.6.4 (для циклов in-in) говорит:
Свойства перечислимого объекта могут быть удалены во время перечисления. Если имущество который еще не был посещен во время перечисления, удаляется, а затем его не посещают. Если новые свойства добавленный к объекту, перечисляемому во время перечисления, вновь добавленные свойства не гарантируются быть посещенным в активном перечислении. Имя свойства не должно посещаться более одного раза в любом перечислении.
Поэтому я думаю, что ясно, что OP-код является законным и будет работать, как ожидалось. Привилегии браузера влияют на порядок итерации и вообще удаляют заявления, но не работает ли код OP. Обычно лучше всего удалить текущее свойство на итерации - удаление других свойств объекта непредсказуемо приведет к их включению (если оно уже посещено) или не включено в итерацию, хотя это может быть или не быть проблемой в зависимости от ситуация.
См. также:
Однако это не влияет на код OP.