JavaScript null vs undefined

Każdy kto zaczynał, bądź zaczyna przygodę z JavaScript na pewno zwrócił uwagę na dwa kluczowe słowa null i undefined. Dziś pokaże pewne ciekawostki związane z tymi przypadkami, mam nadzieję, że pomogą one każdemu kto choć raz próbował zabawy z js’em, zapraszam 🙂

Null oraz undefined są typami. W JavaScript undefined oznacza, że zmienna została zadeklarowana ale jeszcze nie ma żadnej przypisanej wartości.

var temp;
console.log(temp); // undefined

Gdy powyższy kod uruchomimy na konsoli zobaczymy wynik undefined, dzieje się tak ponieważ zmienna temp została zadeklarowana, ale nie przypisano do niej żadnej wartości, nie została zainicjalizowana.

Zmieńmy ten stan i do zmiennej temp przypiszmy wartość null

temp = null
console.log(temp); // null

Po uruchomieniu nasza zmienna ma wartość null. Null może być reprezentowane jako wartość, bezwartości, inaczej mówiąc możemy przypisać do zmiennej temp pudełko z cyferką 5, albo samo pudełko, samo pudełko jest nullem.

var a;
var b;
a = 5;   // wyobraź sobie, że przypisujemy pudełko z  zawartością 5.
b = null;// wyobraź sobie, że przypisujesz puste pudełko.

Console.log pokazuje, że null jest typem null, czyli obiektem, poniżej dobrze widać sens tego zdania 🙂 czym jest null.

var c = null;
console.log(c); // null
console.log(typeof c) // object null

Na dzień dobry trochę pokręcone, no nie? 🙂 Przykład z undefined jest bardziej sensowny:

var c;
console.log(c); // undefined 
console.log(typeof c) // object undefined 

Typem undefined jest undefined. Teraz rodzi się pytanie czy null jest tym samym co undefined? sprawdźmy:

console.log(null === undefined); // false
console.log(null == undefined); // true
console.log(null === null); // true
console.log(null == null); // true

Dlaczego potrójny znak porównania(===) daje false? ponieważ === sprawdza typ i wartość, jeżeli jedna składowa ma inny typ to z góry nie można takiego przypadku sprawdzić.
 
Teraz zrobimy myk w postaci „nie null” czyli negacja „!”:

console.log(!null); // true
console.log(!!null); // false

Interesujący jest jeszcze taki przypadek:

//w takim przypadku można "założyć", że null jest zerem.
console.log(1 + null); // 1

//w tym przypadku można "założyć", że undefined nie jest liczbą.
console.log(1 + undefined); // Nan

Jeszcze jeden przykład:

null = 'value' // ReferenceError
undefined = 'value' // 'value'

Podsumowując, null i undefined teraz mam nadzieje choć trochę pomogło zrozumieć to zestawienie. Undefined to po prostu coś co jest „niczym” wiemy, że jest ale jest nie traktowane jako cokolwiek, null w zależności od przykładu jest jakimś bytem.

 
Pozdro 🙂
 

One comment

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*