Jaka jest różnica między undefined
a null
? Obie wartości reprezentują w końcu pustą wartość.
A jednak…
undefined == null //true
undefined === null //false
Undefined
Inerpreter zwraca undefined
trafiając na zmienną albo własność obiektu, która nie jest zainicjalizowana, nie ma przypisanej wartości.
Undefined
oznacza, że zmienna jeszcze nie istnieje, jest zadeklarowana, ale nie jest zainicjalizowana.
var foo;
foo; //undefined
typeof foo; //undefined
Różne przypadki wystąpienia undefined
:
- zmienna, która nie jest zainicjalizowana (nie ma przypisanej wartości)
- własność obiektu, która nie istnieje
- parametr funkcji, który nie jest podany
- funkcja, która nie zwraca żadnej wartości
- element tablicy, który nie istnieje
Null
Z kolei null
jest wartością, która może być przypisana do zmiennej. Reprezentuje celowy brak wartości, referencji do obiektu.
Null
oznacza, że zmienna istnieje, jest zadeklarowana oraz zainicjalizowana (posiada przypisaną wartość null
, choć nie posiada jeszcze docelowej wartości).
var foo = null;
foo; //null
typeof foo; //object
Porównanie
Wychodzi na to, że undefined
jest typem danych (typ prymitywny), natomiast null
to obiekt. Stąd rozumiemy, skąd bierze się undefined === null //false.
Jednak dobrze wiemy, że zarówno undefined
, jak i null
są jednymi z 6 prymitywnych typów w JS.
Skąd więc typeof null; //object
?!
Stack mówi, że to stary błąd w implementacji JS. Przyjęło się jednak rozumienie, że null
to przyszłościowy kontener dla obiektu. Stąd typeof null; //object
jest OK, mimo iż null
jest typu prymitywnego, a nie referencyjnego.
Bonus
Mam też dla Was ściągę na temat undefined
. Przygotowałam ją na podstawie artykułu 7 tips to handle undefined in javascript. Ściąga skrótowo przedstawia różne przyczyny pojawienia się undefined
oraz sposoby zapobiegania takim przypadkom.
Klikając na powyższy obrazek otworzycie go w oryginalnej rozdzielczości. Oczywiście powyższa ściąga to tylko pigułka artykułu, który dogłębnie omawia wszystkie przypadki pojawienia się undefined
. Gorąco polecam Wam jego lekturę!
Dla formalności: ściągę przygotowałam w programie Gravit Designer. To jakieś azjatyckie cudo, które cały czas jest rozwijane (czytaj: bugi się łatają), odkryłam go jakieś 2 miesiące temu, bardzo pozytywnie mnie zaskoczył jako dosyć rozbudowana, aczkolwiek intuicyjna platforma do tworzenia grafik wszelakich. Ikony – oczywiście dzięki Freepik.
Nie bądźcie źli, że plik jest w formie .png. Niestety, Gravit ma cały czas problem z osadzaniem czcionek w formacie .pdf. W teorii ściąga powinna być formatu a4, jednak okazuje się chyba, że azjatyckie kartki a4 nieco różnią się od europejskich. Nie będę z tym walczyć