Duplicate possible:
Comment puis-je vérifier si une variable est définie en JavaScript?
Existe-t-il une fonction standard permettant de rechercher des variables nulles, non définies ou vierges dans JavaScript?
J'ai un script qui se déroule en deux parties.
La première partie met en place une var:
var pagetype = "textpage";
La 2ème partie est une simple déclaration if:
if(pagetype == "textpage") {
//do something
};
Maintenant, la 2ème partie, la déclaration if, apparaît sur toutes les pages de mon site. Mais la première partie, où le var est déclaré, n'apparaît que sur certaines de mes pages.
Sur les pages sans le var, je reçois naturellement cette erreur:
Uncaught ReferenceError: pagetype is not defined
Ma question est donc la suivante: existe-t-il un moyen, avec JavaScript ou JQ, de détecter si une variable existe (et pas seulement si des données lui sont affectées)?
J'imagine que je voudrais simplement utiliser un autre si déclaration, par exemple:
if ("a var called pagetypes exists")....
Je pense qu’il ya beaucoup de réponses comme celle-ci sur SO mais voilà:
if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) {
...
}
Vous pouvez utiliser typeof
:
if (typeof pagetype === 'undefined') {
// pagetype doesn't exist
}
Pour votre cas, et 99,9% de tous les autres elclanrs
réponse est correcte.
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
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
Avant chacune de vos déclarations conditionnelles, vous pouvez faire quelque chose comme ceci:
var pagetype = pagetype || false;
if (pagetype === 'something') {
//do stuff
}
Il est impossible de déterminer si une variable a été déclarée ou pas autre que d'utiliser try..catch pour provoquer une erreur si elle n'a pas été déclarée. Testez comme:
if (typeof varName == 'undefined')
ne vous dis pas si varName
est une variable dans la portée, seulement les tests avec typeof retournent undefined. par exemple.
var foo;
typeof foo == 'undefined'; // true
typeof bar == 'undefined'; // true
Dans ce qui précède, vous ne pouvez pas dire que foo a été déclaré mais que bar ne l’était pas. Vous pouvez tester les variables globales en utilisant in
:
var global = this;
...
'bar' in global; // false
Mais l'objet global est le seul objet variable auquel vous pouvez accéder. Vous ne pouvez accéder à l'objet variable d'aucun autre contexte d'exécution.
La solution consiste à toujours déclarer les variables dans un contexte approprié.