Ключевое слово javascript for будет перебирать все свойства объекта. Если объект изменен внутри тела цикла, что происходит?
Например, следующий код ОК?
for(var key in obj)
    if (whatever(obj[key]))
        delete obj[key];
ОК будет, если этот код работает детерминированным образом и желательно, чтобы все ключи в obj проверялись ровно один раз. Напротив, в .NET или Java подобные конструкции обычно генерируют исключение.
