2011-12-15 13 views
9

Voglio il mio codice in modo che se esiste una specifica var eseguirà un'azione, altrimenti verrà ignorata e spostata. Il problema con il mio codice è, se la variabile specifica non esiste, causa un errore, presumibilmente ignorando il resto del codice JavaScript.JavaScript se var esiste

Esempio

var YouTube=EpicKris; 

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

possibile duplicato di [Rilevamento di una proprietà dell'oggetto non definita in JavaScript] (http://stackoverflow.com/questions/27509/detecting-an-undefined-object-property-in-java script) –

risposta

3

Codice:

var YouTube=EpicKris; 

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

funzionato il miglior metodo per questo, usa typeof per verificare se esiste var. Ha funzionato perfettamente per me.

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

avrebbe funzionato quando YouTube non è nullo, non definito, 0 o "".

Funziona per voi?

+0

Quindi se var YouTube = EpicKris; non esisteva o se var YouTube = null; o YouTube = 0; quindi non dovrebbero verificarsi errori e il resto del codice JavaScript dovrebbe essere eseguito? –

+0

Ups, ignora la mia risposta, è buggy, gurung è meglio! – Chango

+0

Beh, l'ho risolto con la risposta di Gurung. Ora eseguirà il codice finché esiste YouTube e non è nullo, 0 o una stringa vuota. Questa risposta funziona per te? – Chango

6

Questo è uno classico.

Utilizzare il qualificatore "finestra" per i controlli cross browser sulle variabili non definite e non si interromperà.

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

o per il nocciolo duro sticklers dal loggione ...

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

Questo non funzionerà se si è in un ambito diverso. Non consiglio di farlo. – regality

+0

Sì, avrei dovuto anche menzionare, facendo qualsiasi qualificatore di oggetto come root diciamo che hai un oggetto "qualcosa = {}", quindi controlli se "qualcosa.x" che non vomiterà neanche. Ho dovuto farlo durante la scrittura di plugin boostrapping come window.myThing = window.myThing || {}; ecc eccIE è la vera ragione per questo perché IE è ritardato, anche alla v9. –

+0

Quindi se var YouTube = EpicKris; non esisteva quindi non dovrebbero verificarsi errori e il resto del codice JavaScript dovrebbe essere eseguito? –

1

Cosa succede ad usare try/catch:

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

Potresti spiegarmelo? –

+0

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

+0

Questo approccio funziona ovunque ma è l'equivalente di dire "Non so come funziona, quindi inserirò alcuni codice lì ". Questo dovrebbe essere fatto quando sai che qualcosa può fallire in base all'utente o alla rete o qualcosa fuori dal tuo controllo nella maggior parte dei casi. In genere non le cose che capisci perché si rompono e sono sotto il tuo controllo. –

0

Credo che questo sia ciò che si può essere alla ricerca di:

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

è facile ... è possibile farlo su 2 modi

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 

} 

oppure si può essere

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 

} 
Problemi correlati