Wybrałem to stąd
Niezdefiniowana wartość jest pierwotną wartością używaną, gdy zmiennej nie została przypisana wartość.
Wartość null jest pierwotną wartością, która reprezentuje odwołanie null, puste lub nieistniejące.
Kiedy zadeklarujesz zmienną przez var i nie podasz jej wartości, wartość będzie niezdefiniowana. Samo, jeśli spróbujesz WScript.Echo () lub alert () tę wartość, nic nie zobaczysz. Jeśli jednak dodasz do niego pusty ciąg, nagle pojawi się:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Możesz zadeklarować zmienną, ustawić ją na null, a zachowanie jest identyczne, z wyjątkiem tego, że zobaczysz wydruk „null” i „niezdefiniowany”. To naprawdę niewielka różnica.
Możesz nawet porównać zmienną niezdefiniowaną do wartości null lub odwrotnie, a warunek będzie spełniony:
undefined == null
null == undefined
Uważa się je jednak za dwa różne typy. Choć niezdefiniowany jest typem samym w sobie, null jest uważany za specjalną wartość obiektu. Możesz to zobaczyć za pomocą typeof (), który zwraca ciąg reprezentujący ogólny typ zmiennej:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
Uruchomienie powyższego skryptu spowoduje następujące wyniki:
undefined
object
Bez względu na to, że są różnymi typami, będą nadal działać tak samo, jeśli spróbujesz uzyskać dostęp do członka jednego z nich, np. Oznacza to, że zgłoszą wyjątek. Dzięki WSH zobaczysz, że przerażające „zmienna” ma wartość zerową lub nie jest przedmiotem ”, i jeśli masz szczęście (ale to temat na inny artykuł).
Możesz jawnie ustawić zmienną na niezdefiniowaną, ale odradzam ją. Polecam tylko ustawić zmienne na null i pozostawić niezdefiniowaną wartość rzeczy, o których zapomniałeś ustawić. Jednocześnie naprawdę zachęcam do ustawiania każdej zmiennej. JavaScript ma łańcuch zasięgu inny niż w językach w stylu C, łatwo myląc nawet doświadczonych programistów, a ustawienie zmiennych na null jest najlepszym sposobem na uniknięcie błędów opartych na nim.
Innym przykładem, w którym zobaczysz niezdefiniowane wyskakujące okienko, jest użycie operatora usuwania. Ci z nas ze świata C mogą błędnie interpretować to jako niszczenie obiektu, ale tak nie jest. Operacja ta polega na usunięciu indeksu dolnego z tablicy lub elementu z obiektu. W przypadku tablic nie ma to wpływu na długość, ale raczej indeks dolny jest teraz uważany za niezdefiniowany.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
Wynikiem powyższego skryptu jest:
0.) a
1.) undefined
2.) c
Otrzymasz również niezdefiniowany zwrot podczas czytania indeksu dolnego lub członka, który nigdy nie istniał.
Różnica między wartością null a niezdefiniowaną jest taka: JavaScript nigdy nie ustawi niczego na null, zwykle to robimy. Chociaż możemy ustawić zmienne na niezdefiniowane, wolimy null, ponieważ nie jest to coś, co kiedykolwiek zostało zrobione dla nas. Kiedy debugujesz, oznacza to, że wszystko ustawione na null należy do ciebie, a nie JavaScript. Poza tym te dwie specjalne wartości są prawie równoważne.
null
w JavaScript jest wartość?