2009-12-31 16 views
39

Possible Duplicate:
Detecting an undefined object property in JavaScriptJak obsługiwać 'niezdefiniowane' w javascript

z poniższej javascript próbki

try { 
    if(jsVar) { 
    proceed(); 
     } 
}catch(e){ 
     alert(e); 
} 

to jsVar jest zadeklarowana i parafowane w innym js grzywny.

Problem polega na tym, że kod generuje niezdefiniowany błąd, gdy ten kod jest wykonywany przed wykonaniem drugiego pliku (w którym został zadeklarowany i zainicjowany). Dlatego jest otoczony przez próbę i złapanie.

Jaki jest najlepszy sposób, aby poradzić sobie z tym niezdefiniowanym błędem, niż spróbować złapać?

Odpowiedz

64

Można sprawdzić fakt z

if (typeof(jsVar) == 'undefined') { 
    ... 
} 
+0

Czy ma to jakąkolwiek przewagę nad "moim" sposobem? –

+0

Może spowodować błąd: jsVar nie jest zdefiniowany. Powinieneś przetestować go w ten sposób: if (window.jsVar! == undefined) {}. Wygląda na to, że typeof() "łapie" ten błąd. –

+0

@Fabien: Lub może użyć, jeśli ("jsVar" w oknie) {} ... ale chciałbym uniknąć kodu, który wymagałby kodowania dla tego przypadku błędu. –

0

w JavaScript, następujące wartości spowoduje, że warunek, jeśli się nie powiedzie i nie wykonać jego oświadczenie: null, niezdefiniowanej, fałszywych, Nan, numer 0, a pusty strunowy ''.

Zakładając, że zmienna jsVar jest wartością logiczną i chcemy wywołać metodę continue(), gdy jsVar ma wartość true, możemy wykonać następujące sprawdzanie.

if (jsVar && jsVar == true) 
    proceed(); 

Powyższy fragment kodu najpierw sprawdza, czy jsVar został zdefiniowany, a następnie sprawdza, czy jego wartość jest prawdziwa Warunek if zostanie spełniony tylko wtedy, gdy oba warunki są spełnione.

Jeśli jsVar nie jest wartością boolowską, możemy zastąpić odpowiednią poprawkę w miejsce jsVar == true w powyższym kodzie.

+0

należy pamiętać, że to nie sprawdza boolowskiego 'prawda', ponieważ nie używasz ścisłego porównania (w JS, np.' '1' == true' jest prawdziwe!); to nadal będzie powodowało błąd odniesienia, jeśli zmienna nie została zdefiniowana, tzn. twój kod nie rozwiązuje problemu Madhu – Christoph

+0

@ Christopheł masz rację! – Scott

8

Jak to często bywa z JavaScript, istnieje wiele sposobów, aby to zrobić:

typeof foo !== 'undefined' 
window.foo !== undefined 
'foo' in window 

Pierwsze dwa powinny być równoważne (o ile nie jest zasłonięta foo o zmiennej lokalnej), natomiast ostatnia zwróci true, jeśli globalna zmienna jest zdefiniowana, ale nie zainicjowana (lub jawnie ustawiona na undefined).

Powiązane problemy