Modification du tableau associatif Javascript pendant la boucle

Le javascript for mot-clé iteraitera sur toutes les propriétés d'un objet. Si l'objet est modifié dans le corps en boucle, qu'est-ce qui se passe?

Par exemple, le code suivant est-il correct?

 for(var key in obj) if (whatever(obj[key])) delete obj[key]; 

OK serait si ce code fonctionne de manière déterministe et de préférence que toutes les clés d' obj sont testées exactement une fois. En revanche, dans les constructions similaires de .NET ou Java, on enverra généralement une exception.

Je pense que cela fonctionne. Il suffit de faire attention à demander la fonctionnalité hasOwnProperty(key) car parce for pourrez également itérer sur les propriétés héritées (et les méthodes, qui ne sont que des propriétés avec des valeurs de fonction).

Aussi: http://www.w3schools.com/js/js_loop_for_in.asp dit:

Remarque: Le code dans le corps du for … in loop est exécuté une fois pour chaque propriété.

Aussi: https://developer.mozilla.org/fr/JavaScript/Reference/Statements/for…in dit:

A pour … en boucle itère sur les propriétés d'un objet dans un ordre arbitraire (voir l'opérateur de suppression pour plus de pourquoi on ne peut pas dépendre de l'apparente ordonnance de l'itération, au moins dans un paramètre de navigateur croisé). Si une propriété est modifiée dans une même itération puis visitée plus tard, la valeur exposée par la boucle sera sa valeur à cette date ultérieure. Une propriété qui a été supprimée avant d'être visité ne sera plus visitée ultérieurement. Les propriétés ajoutées à l'objet sur lequel l'itération se produit peuvent être visitées ou omises dans l'itération. En général, il est préférable de ne pas ajouter, modifier ou supprimer des propriétés de l'objet pendant l'itération, autrement que la propriété actuellement visité; Il n'y a aucune garantie de la présence ou non d'une propriété ajoutée, si une propriété modifiée sera visitée avant ou après sa modification ou si une propriété supprimée sera visitée avant qu'elle ne soit supprimée.

Ce que j'ai lu de ceci est – si vous modifiez des valeurs autres que le courant, le non-déterminisme pourrait vous mordre dans le cul. Cependant, modifier le courant devrait être correct.