JavaScript sprawdza czy zmienna istnieje (jest zdefiniowana/zainicjowana)

Która metoda sprawdzania czy zmienna została zainicjalizowana jest lepsza/poprawna? (Zakładając, że zmienna może zawierać cokolwiek (string, int, obiekt, funkcję, itd.))

if (elem) { // or !elem

lub

if (typeof(elem) !== 'undefined') {

lub

if (elem != null) {

Chcesz operator typeof. Konkretnie:

if (typeof variable !== 'undefined') {
    // the variable is defined
}
Komentarze (19)

W większości przypadków używałbyś:

elem != null

W przeciwieństwie do prostego if (elem), pozwala on na 0, false, NaN i '', ale odrzuca null lub undefined, co czyni go dobrym, ogólnym testem na obecność argumentu lub właściwości obiektu.


Inne kontrole również nie są niepoprawne, po prostu mają inne zastosowania:

  • if (elem): może być użyte jeśli elem jest gwarantowane jako obiekt, lub jeśli false, 0, etc. są uważane za "domyślne" wartości (stąd odpowiednik undefined lub null).

  • Opcja typeof elem == 'undefined' może być użyta w przypadkach, gdy określony null ma inne znaczenie niż niezainicjalizowana zmienna lub właściwość.

  • Jest to jedyne sprawdzenie, które nie wyrzuci błędu jeśli elem nie jest deklarowany (tzn. nie ma deklaracji var, nie jest właściwością window, lub nie jest argumentem funkcji). Jest to, moim zdaniem, dość niebezpieczne, ponieważ pozwala literówkom przemknąć niezauważone. Aby tego uniknąć, zobacz poniższą metodę.


Przydatne jest również ścisłe porównanie z undefined:

if (elem === undefined) ...

Ponieważ jednak globalne undefined może być nadpisane inną wartością, najlepiej jest zadeklarować zmienną undefined w bieżącym zakresie przed jej użyciem:

var undefined; // really undefined
if (elem === undefined) ...

Lub:

(function (undefined) {
    if (elem === undefined) ...
})();

Dodatkową zaletą tej metody jest to, że minifiery JS mogą zredukować zmienną undefined do jednego znaku, oszczędzając kilka bajtów za każdym razem.

Komentarze (4)

To zależy, czy zależy ci tylko na tym, że zmienna została zdefiniowana, czy chcesz, aby miała znaczącą wartość.

Sprawdzenie, czy typ jest niezdefiniowany sprawdzi, czy zmienna została już zdefiniowana.

== null lub !== null sprawdzi tylko czy wartość zmiennej jest dokładnie null.

== null lub != null sprawdzi czy wartość jest undefined lub null.

if(wartość) sprawdzi czy zmienna jest undefined, null, 0, lub pustym łańcuchem.

Komentarze (0)