Всё ли в порядке при удалении свойств объекта в цикле for in?
Предполагается, что свойство проверяется изолированно от других свойств. То есть в итерации, где проверяется свойство x, может быть удалено только это свойство.
for(let key in obj) {
if (obj[key] % 2 == 0) delete obj[key];
}
Возможны ли пропуски? То есть может ли поменяться порядок при удалении свойства?
В спецификации очень мутно написано, что гарантируется, а что нет.
UPD: Объект нормальный, с обычными свойствами типа obj.prop = 123;
Не совсем, такая конструкция может забуриться в свойства прототипа, и тебе надо как-то их проверять с помощью hasOwnProperty.
Но можно использовать Object.keys, получить массив ключей объекта и пробежаться по ним, проверяя значения объекта и удаляя. Данный метод гарантированно вернет только свойства объекта и проигнорирует свойства прототипа.