2011-12-15 10 views
9

Chcę, aby mój kod tak, że jeśli konkretny var istnieje, wykona akcję, w przeciwnym razie zostanie zignorowany i przejdzie dalej. Problem z moim kodem polega na tym, że jeśli konkretny var nie istnieje, powoduje błąd, prawdopodobnie ignorując resztę kodu JavaScript.JavaScript, jeśli istnieje var

Przykład

var YouTube=EpicKris; 

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

możliwy duplikat [Wykrywanie niezdefiniowanej właściwości obiektu w JavaScript] (http://stackoverflow.com/questions/27509/detecting-an-undefined-object-property-in-java skrypt) –

Odpowiedz

3

Kod:

var YouTube=EpicKris; 

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

Działało najlepsza metoda dla to, użyj typeof, aby sprawdzić, czy var istnieje. To działało idealnie dla mnie.

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

będzie działać, gdy YouTube nie jest null, niezdefiniowany, 0 lub "".

Czy to działa dla Ciebie?

+0

Więc jeśli var YouTube = EpicKris; nie istnieje lub jeśli var YouTube = null; lub YouTube = 0; to nie powinno wystąpić żadne błędy, a reszta kodu JavaScript powinna zostać uruchomiona? –

+0

Podskoki, zignoruj ​​moją odpowiedź, jest buggy, gurung jest lepszy! – Chango

+0

Naprawiłem to za pomocą odpowiedzi gurunga. Teraz będzie wykonywał kod tak długo, jak długo istnieje YouTube i nie ma wartości NULL, 0 lub pusty ciąg znaków. Czy ta odpowiedź działa dla ciebie? – Chango

6

To jest klasyczny.

Użyj kwalifikatora "okno" do sprawdzania krzyżowych przeglądarek niezdefiniowanych zmiennych i nie będzie się łamał.

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

lub do twardego rdzenia sticklers z galerii orzechowym ...

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

To nie zadziała, jeśli jesteś w innym zakresie. Nie polecam tego. – regality

+0

Tak, powinienem był również wspomnieć, wykonując dowolny kwalifikator obiektu jako root, mówiąc, że masz obiekt "something = {}", a następnie sprawdzasz, czy "something.x", który nie będzie wymiotował. Musiałem to zrobić, pisząc wtyczki boostarmowe, takie jak window.myThing = window.myThing || {}; itd itd.IE jest prawdziwym powodem tego, ponieważ IE jest opóźniony, nawet przy v9. –

+0

Więc jeśli var YouTube = EpicKris; nie istnieje, więc nie powinno wystąpić żadne błędy, a reszta kodu JavaScript powinna zostać uruchomiona? –

1

Co na temat korzystania try/catch:

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

Czy możesz mi to wyjaśnić? –

+0

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

+0

To podejście działa wszędzie, ale jest to odpowiednik słowa "Nie wiem jak to działa, więc dodam trochę tam kod ". Powinno to nastąpić, gdy wiesz, że w większości przypadków coś może się nie udać w zależności od użytkownika lub sieci lub czegoś, na co nie masz wpływu. Zazwyczaj nie rzeczy, które rozumiesz, dlaczego się łamią i masz kontrolę. –

0

Wierzę, że to jest to, co może być szukasz:

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

łatwo ... można to zrobić na 2 sposoby

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 

} 

czy można być

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 

}