65 votes

JQuery / Javascript: vérifier si la var existe

Double Possible:
Comment puis-je vérifier si une variable est définie dans le code JavaScript?
Est-il une fonction standard pour vérifier la valeur null, indéfini, ou vide de variables en JavaScript?

J'ai un script qui se produit en deux parties.

La première partie met en place un var:

var pagetype = "textpage";

La 2ème partie est une simple déclaration si:

if(pagetype == "textpage") {
//do something
};

Maintenant la 2ème partie, l'instruction if, apparaît sur toutes les pages de mon site. Mais la première partie, où le var est déclarée, n'apparaît que sur certaines de mes pages.

Sur les pages sans le var tout naturellement que je reçois cette erreur:

Uncaught ReferenceError: pagetype is not defined

Donc ma question est: est-il possible avec JavaScript ou JQ pour détecter si une variable existe (et pas seulement si il a données, est attribué à)?

Je m'imagine, je voudrais juste utiliser un autre si tresorerie, par exemple:

if ("a var called pagetypes exists")....

118voto

elclanrs Points 40467

Je soupçonne qu'il y a beaucoup de réponses comme celle-ci sur SO, mais voilà:

 if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) {
  ...
}
 

20voto

Blender Points 114729

Vous pouvez utiliser typeof :

 if (typeof pagetype === 'undefined') {
    // pagetype doesn't exist
}
 

9voto

jermel Points 1389

Pour votre cas, 99,9% des autres réponses elclanrs sont correctes.

Mais parce que undefined est une valeur valide, si quelqu'un devait tester une variable non initialisée

 var pagetype; //== undefined
if (typeof pagetype === 'undefined') //true
 

le seul moyen fiable à 100% de déterminer l'existence d'une variable consiste à intercepter l'exception;

 var exists = false;
try { pagetype; exists = true;} catch(e) {}
if (exists && ...) {}
 

Mais je ne l'écrirais jamais de cette façon

4voto

Bruno Points 3551

Pour tester l'existence, il existe deux méthodes.

une. "property" in object

Cette méthode vérifie l'existence de la propriété dans la chaîne de prototypes.

b. object.hasOwnProperty( "property" )

Cette méthode ne monte pas dans la chaîne de prototypes pour vérifier l'existence de la propriété, elle doit exister dans l'objet sur lequel vous appelez la méthode.

 var x; // variable declared in global scope and now exists

"x" in window; // true
window.hasOwnProperty( "x" ); //true
 

Si nous testions en utilisant l'expression suivante, elle renverrait false

 typeof x !== 'undefined'; // false
 

3voto

Jason Points 20255

Avant chacune de vos déclarations conditionnelles, vous pouvez faire quelque chose comme ceci:

 var pagetype = pagetype || false;
if (pagetype === 'something') {
    //do stuff
}
 

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