Bagian standar ECMAScript 5.1 12.6.4 (pada loop for-in) mengatakan:
Properti dari objek yang dicacah dapat dihapus selama pencacahan. Jika suatu properti yang belum dikunjungi saat pencacahan dihapus, maka properti tersebut tidak akan dikunjungi. Jika properti baru ditambahkan ke objek yang akan dihitung selama pencacahan, properti yang baru ditambahkan tidak dijamin akan dikunjungi dalam pencacahan aktif. Nama properti tidak boleh dikunjungi lebih dari sekali dalam pencacahan apapun.
Jadi saya pikir sudah jelas bahwa kode OP itu legal dan akan berfungsi seperti yang diharapkan. Kebiasaan browser memengaruhi urutan iterasi dan pernyataan hapus secara umum, tetapi tidak apakah kode OP akan berfungsi. Biasanya yang terbaik adalah menghapus properti saat ini dalam iterasi - menghapus properti lain dalam objek secara tidak terduga akan menyebabkannya disertakan (jika sudah dikunjungi) atau tidak disertakan dalam iterasi, meskipun itu mungkin atau mungkin tidak menjadi perhatian tergantung pada situasi.
Lihat juga:
Tak satu pun dari ini benar-benar mempengaruhi kode OP.