640 votes

Comment pour désactiver une variable Javascript ?

J’ai une variable globale en Javascript (en fait une propriété de la fenêtre, mais je ne pense pas que c’est important) qui était déjà peuplée par un script précédent, mais je ne veux pas un autre script qui s’exécutera plus tard pour voir sa valeur ou qu’il a été encore défini.

J’ai mis et ça marche aux fins d’essais mais je ne pense pas que c’est la bonne voie à suivre à ce sujet.

Qu'en penses-tu ?

282voto

noah Points 9333

@scunlife la réponse de fonctionner, mais techniquement, il devrait être

delete window.some_var; 

supprimer est censé être un no-op quand la cible n'est pas une propriété de l'objet. par exemple,

(function() {
   var foo = 123;
   delete foo; // wont do anything, foo is still 123
   var bar = { foo: 123 };
   delete bar.foo; // foo is gone
}());

Mais depuis que les variables globales sont en fait des membres de la fenêtre de l'objet, il fonctionne.

Lorsque prototype chaînes sont impliqués, à l'aide de la suppression devient de plus en plus complexe, car il supprime uniquement la propriété de l'objet cible, et non pas le prototype. par exemple,

function Foo() {}
Foo.prototype = { bar: 123 };
var foo = new Foo();
// foo.bar is 123
foo.bar = 456;
// foo.bar is now 456
delete foo.bar;
// foo.bar is 123 again.

Donc, soyez prudent.

EDIT: Ma réponse est quelque peu inexacte (voir la section "idées fausses" à la fin). Le lien explique tous les détails croustillants, mais le résumé est qu'il peut y avoir de grandes différences entre les navigateurs et en fonction de l'objet que vous supprimez. delete object.someProp doit généralement être en sécurité tant que object !== window. Je ne pas l'utiliser pour supprimer les variables déclarées avec var bien que vous pouvez dans les bonnes circonstances.

38voto

meder Points 81864

Si vous êtes implicitement déclarer 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 la outre un ReferenceError sera levée, car vous ne pouvez pas ajouter une chaîne à une non déclarées, non défini identifiant. Exemple:

x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined

Il peut être plus sûr dans certaines situations, de l'attribuer à false, null ou undefined donc de la déclarer et de ne pas jeter ce type d'erreur.

foo = false

Notez que dans ECMAScript null, false, undefined, 0, NaNou '' serait à même d'évaluer tous d' false. Assurez-vous de ne pas utiliser l' !== de l'opérateur, mais au lieu != lors de la vérification de type pour les booléens et vous ne voulez pas la vérification de l'identité (so null serait - == false et false == undefined).

Notez aussi que l' delete n'a pas de "supprimer" les références, mais seulement des propriétés directement sur l'objet, par ex.:

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 var vous ne pouvez pas le supprimer:

(function() {
    var x = 5;
    alert(delete x)
    // false
})();

Dans Rhino:

js> var x
js> delete x
false

De même, vous pouvez supprimer certaines propriétés prédéfinies comme Math.PI:

js> delete Math.PI
false

Il y a quelques rares exceptions delete comme avec n'importe quelle langue, si vous vous souciez assez, vous devriez lire:

34voto

scunliffe Points 30964
some_var = null;

//or remove it..
delete some_var;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X