Comme Mike Samuel le souligne dans sa réponse, l'une des utilisations les plus courantes de supprimer, c'est quand vous traitez un objet comme un "sac de propriété" qui associe des noms avec des valeurs. Il y a logiquement une différence entre "ce nom est maintenant connecté à certains faux valeur" et "ce nom n'est pas mappé à tous". "supprimer" permet d'atteindre le dernier.
C'est tout assez bien compris. J'ai pensé que je pourrais ajouter un intéressant historique de la note concernant l'JScript 1.0 à 5.0 moteurs.
Dans ceux d'origine de Microsoft implémentations de JScript nous avons utilisé OLE Automation de style IDispatch objets à mettre en oeuvre expando objets. IDispatch de cours fonctionne par association d'un nom avec un "id de dispatch", qui est simplement un entier. Pour invoquer dynamiquement, d'abord, vous demandez l'envoi de l'objet pour vous donner l'envoi de l'ID associé à un nom, et puis vous dire: "maintenant, il faut appeler la méthode associée à cet IDENTIFIANT, compte tenu de ces arguments".
C'est bien et bon. Mais l'une des exigences de la IDispatch contrat est que le mappage de nom d'expédition ID être stable sur l'ensemble de la durée de vie de l'objet. Donc, si quelqu'un dit "ajouter une propriété Foo à cet objet", alors nous pourrions décider que les biens Foo est associé avec l'identificateur d'expédition 0x1234 dans cet objet. À partir de ce moment, chaque fois que l'objet est demandé pour l'identificateur d'expédition de "Toto", il faut redonner 0x1234, même si Toto est supprimé et ajouté par la suite à nouveau. Cela permet à l'appelant de maintenir leur propre fast cache de nom/dispid paires plutôt que de toujours avoir à demander à l'objet sur chaque invocation.
La conséquence pratique est que les "supprimer" n'est pas en aucune façon de réduire le fardeau de la mémoire sur l'objet dans la mise en œuvre! Lorsque vous supprimez un bien (à l'origine, la mise en œuvre), nous devons ajouter un peu de l'objet de marquage de cet identificateur d'expédition comme supprimés, mais nous devons conserver toutes les informations sur le nom/id de l'appariement dans le cas où le nom ne vient jamais en arrière. L'ajout d'un grand nombre de propriétés d'un objet et la suppression de tous les d'eux, ne craint pas l'objet en mémoire.
Le moteur JScript a bien sûr été complètement réécrit depuis mon époque (sauf, je crois, l'analyseur syntaxique et l'analyseur lexical) donc je n'ai aucune idée si le moteur a encore ce singulier caprice. Il serait intéressant de le savoir.