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 ReferenceError
sera 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
, NaN
ou ''
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 null
ferait == false
et false == undefined
).
Notez également que delete
ne "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 var
vous 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 à delete
comme avec n'importe quelle langue, si vous vous souciez suffisamment, vous devriez lire:
var
dehors 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.