2012-09-04 5 views
25

Possible Duplicate:
Detecting an undefined object property in JavaScript
How to determine if variable is 'undefined' or 'null'Jak sprawdzić, czy zmienna jest zarówno nieważne i/lub niezdefiniowane w JavaScript

W moim kodu, mam warunek, który wygląda

if (variable !== null && variable !== undefined) { 
} 

Ale zamiast robić to w dwóch etapach, tj. sprawdzenie, czy nie jest zdefiniowane, a nie puste. Czy jest jeden krok sprawdzający, czy zastępuje to sprawdzanie.

+0

To nie jest dokładnie spowalnia swój kod, jeśli o to się martwisz. – Blazemonger

+0

Użyj funkcji: 'function isNullOrUndefined (variable) {return variable === null || zmienna === niezdefiniowana; } '. – VisioN

+0

@VisioN Jeśli przekażesz niezdefiniowaną zmienną do funkcji jako argument, otrzymasz błąd. – dqhendricks

Odpowiedz

41

Zmienna nie może jednocześnie być jednocześnie null i undefined. Jednak bezpośrednią odpowiedź na Twoje pytanie brzmi:

if (variable != null) 

Jeden =, nie dwa.

Istnieją dwa specjalne klauzule w „abstrakcyjnego porównania równość algorytmu” w ciemno JavaScript poświęconej przypadku jednego argumentu będącego null a drugi będąc undefined, a wynik jest true dla == i false dla !=. Zatem jeśli wartość zmiennej to undefined, to nie jest ona != null, a jeśli nie jest zerowa, to oczywiście nie jest != null.

Teraz sprawa identyfikator nie jest zdefiniowany w ogóle, albo jako var lub let, jako parametr funkcji lub jako własność kontekście globalnym jest inna. Odniesienie do takiego identyfikatora jest traktowane jako błąd w czasie wykonywania. Możesz próbować odniesienia i złapać błąd:

var isDefined = false; 
try { 
    (variable); 
    isDefined = true; 
} 
catch (x) {} 

Osobiście uważam, że jednak wątpliwa praktyka. Dla globalnych symboli, które mogą lub mogą być tam na podstawie obecności lub braku innej biblioteki, lub jakiegoś podobnej sytuacji, można przetestować na window nieruchomości (w przeglądarce obsługę skryptów JavaScript):

var isJqueryAvailable = window.jQuery != null; 

lub

var isJqueryAvailable = "jQuery" in window; 
+0

Chociaż jest to poprawne i odpowiada na pytanie OP, myślę, że oryginalny kod jest bardziej przejrzysty. Nie wszyscy rozpoznają subtelną różnicę między 'x! = Null' i powiedz'! X'. – RobG

+1

@RobG cóż, generalnie nie daję "każdemu" dostępu do mojego repozytorium kodu źródłowego :-) Myślę, że jest to ważne dla programistów JavaScript, aby wiedzieć coś takiego, innymi słowy. – Pointy

+0

Świetna odpowiedź! __ – johnjohn

6

można zawinąć go w swoim własnym funkcji:

function isNullAndUndef(variable) { 

    return (variable !== null && variable !== undefined); 
} 
+1

Lub co najmniej 'return (zmienna! == null && variable! == undefined)' Come on! To jest jak powiedzenie 'if (true) {return true; } return false; ' – jeremy

Powiązane problemy