Si vous déclarez implicitement la variable sans var, la bonne façon serait d'utiliser delete foo.
Cependant, après l'avoir supprimé, si vous essayez de l'utiliser dans une opération telle que l'ajout, un ReferenceErrorsera levé car vous ne pouvez pas ajouter de chaîne à un identifiant non déclaré et non défini. Exemple:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
Il peut être plus sûr dans certaines situations de l'affecter à false, null ou indéfini afin qu'il soit déclaré et ne génère pas ce type d'erreur.
foo = false
Notez que dans ECMAScript null, false, undefined, 0, NaNou ''serait tout à évaluer false. Assurez-vous simplement que vous n'utilisez pas l' !==opérateur mais à la place !=lors de la vérification de type pour les booléens et que vous ne voulez pas de vérification d'identité (comme le nullferait == falseet false == undefined).
Notez également que deletene "supprime" pas les références mais seulement les propriétés directement sur l'objet, par exemple:
bah = {}, foo = {}; bah.ref = foo;
delete bah.ref;
alert( [bah.ref, foo ] )
// ,[object Object] (it deleted the property but not the reference to the other object)
Si vous avez déclaré une variable avec varvous ne pouvez pas la supprimer:
(function() {
var x = 5;
alert(delete x)
// false
})();
Dans Rhino:
js> var x
js> delete x
false
Vous ne pouvez pas non plus supprimer certaines propriétés prédéfinies comme Math.PI:
js> delete Math.PI
false
Il y a quelques exceptions étranges à deletecomme avec n'importe quelle langue, si vous vous souciez suffisamment, vous devriez lire:
vardehors d'une fonction) sont des propriétés de "l'objet global", ce qui est le cas dans les navigateurs Webwindow. Donc -var a = 1; delete window.a; console.log(a);supprimera avec succès la variable et provoquera une erreur de référence sur la dernière ligne.