Các ECMAScript 5.1 tiêu chuẩn phần 12.6.4 (trên cho trong vòng) cho biết:
Các thuộc tính của đối tượng được liệt kê có thể bị xóa trong quá trình liệt kê. Nếu một thuộc tính chưa được truy cập trong quá trình liệt kê bị xóa, thì nó sẽ không được truy cập. Nếu các thuộc tính mới được thêm vào đối tượng đang được liệt kê trong quá trình liệt kê, các thuộc tính mới được thêm vào sẽ không được đảm bảo sẽ được truy cập trong kiểu liệt kê đang hoạt động. Tên tài sản không được truy cập nhiều hơn một lần trong bất kỳ bảng liệt kê nào.
Vì vậy, tôi nghĩ rõ ràng rằng mã của OP là hợp pháp và sẽ hoạt động như mong đợi. Các câu hỏi kỳ quặc của trình duyệt ảnh hưởng đến thứ tự lặp lại và câu lệnh xóa nói chung, nhưng không ảnh hưởng đến việc mã OP có hoạt động hay không. Nói chung, tốt nhất chỉ nên xóa thuộc tính hiện tại trong lần lặp - việc xóa các thuộc tính khác trong đối tượng sẽ khiến chúng không được bao gồm (nếu đã được truy cập) hoặc không được đưa vào lần lặp, mặc dù điều đó có thể có hoặc không phải là mối quan tâm tùy thuộc vào tình hình.
Xem thêm:
Tuy nhiên, không có điều nào thực sự ảnh hưởng đến mã của OP.