2011-12-15 5 views
9

Je veux mon code de sorte que si une var spécifique existe, il va effectuer une action, sinon il sera ignoré et se déplacer. Le problème avec mon code est, si la variable spécifique n'existe pas, provoque une erreur, probablement en ignorant le reste du code JavaScript.JavaScript si var existe

Exemple

var YouTube=EpicKris; 

if ((typeof YouTube) != 'undefined' && YouTube != null) { 
    document.write('YouTube:' + YouTube); 
}; 
+0

duplication possible de [Détection d'une propriété d'objet indéfini en JavaScript] (http://stackoverflow.com/questions/27509/detecting-an-undefined-object-property-in-java script) –

Répondre

3

code:

var YouTube=EpicKris; 

if (typeof YouTube!='undefined') { 
    document.write('YouTube:' + YouTube); 
}; 

ELABOREE la meilleure méthode pour Pour cela, utilisez typeof pour vérifier si la variable existe. Cela a fonctionné parfaitement pour moi.

7
try { 
    if(YouTube) { 
    console.log("exist!"); 
    } 
} catch(e) {} 
console.log("move one"); 

travaillerais quand YouTube est non nulle, non définie, 0 ou "".

Est-ce que cela fonctionne pour vous?

+0

Donc si var YouTube = EpicKris; n'a pas existé ou si var YouTube = null; ou YouTube = 0; alors aucune erreur ne devrait se produire et le reste du code JavaScript devrait s'exécuter? –

+0

Ups, ignore ma réponse, est bogué, gurung est mieux! – Chango

+0

Eh bien, je l'ai corrigé avec la réponse de gurung. Maintenant, il va exécuter le code aussi longtemps que YouTube existe et n'est pas nul, 0 ou une chaîne vide. Cette réponse fonctionne-t-elle pour vous? – Chango

6

Ceci est un classique.

Utilisez le qualificatif "window" pour les vérifications croisées sur des variables non définies et ne cassez pas.

if (window.YouTube) { // won't puke 
    // do your code 
} 

OU pour le noyau dur rigoristes de la galerie d'arachide ...

if (this.YouTube) { 
    // you have to assume you are in the global context though 
} 
+3

Cela ne fonctionnera pas si vous êtes dans une portée différente. Je ne recommande pas cela. – regality

+0

Oui, j'aurais dû aussi mentionner, en faisant n'importe quel qualificateur d'objet en tant que root dire que vous avez un objet "something = {}" alors vous vérifiez si "something.x" ne vomira pas non plus. Je devais le faire lors de l'écriture de plugins boostrapping tels que window.myThing = window.myThing || {}; etc.IE est la vraie raison de cela comme IE est retardé, même à v9. –

+0

Donc si var YouTube = EpicKris; n'existe pas alors aucune erreur ne devrait se produire et le reste du code JavaScript devrait fonctionner? –

1

Qu'en est-il en utilisant try/catch:

try { 
    //do stuff 
} catch(e) { /* ignore */ } 
+0

Pourriez-vous m'expliquer cela? –

+0

@KristianMatthews: Voir ceci: http://jsfiddle.net/BGurung/deRvV/3/ –

+0

Cette approche fonctionne partout, mais c'est l'équivalent de dire "Je ne sais pas comment cela fonctionne donc je vais mettre en code là-bas ". Cela devrait être fait lorsque vous savez que quelque chose peut échouer en fonction de l'utilisateur ou du réseau ou de quelque chose hors de votre contrôle dans la plupart des cas. Typiquement pas des choses que vous comprenez pourquoi elles se cassent et sont sous votre contrôle. –

0

Je crois que c'est ce que vous cherchez peut-être:

if (typeof(YouTube)!=='undefined'){ 
    if (YouTube!==undefined && YouTube!==null) { 
     //do something if variable exists AND is set 
    } 
} 
0

il est facile ... vous pouvez le faire sur 2 façons

var YouTube = window["EpicKris"] ;// or this["EpicKris"] or objectContainer["EpicKris"] 

if(YouTube) { //if is null or undefined (Zero and Empty String too), will be converted to false 

    console.log(YouTube);// exists 

}else{ 

    consol.log(YouTube);// null, undefined, 0, "" or false 

} 

ou vous pouvez être

var YouTube = window["EpicKris"] ;// or this["EpicKris"] or objectContainer["EpicKris"] 

if(typeof YouTube == "undefined" || YouTube == null) { //complete test 

    console.log(YouTube);//exists 

}else{ 

    console.log(YouTube);//not exists 

}