Zawsze myślałem: nullczy ustawiłeś go na pusty, undefinedjest pusty, ponieważ nie został ustawiony. Lub nulljest celowo pusty, podczas gdy undefinedwciąż jest pusty. Zasadniczo pokazuje zamiar.
NaN. Sam zobacz. console.log (null-undefined). Różnica między wartością zerową a niezdefiniowaną wynosi NaN. (Pamiętaj, że jest to próba humoru, zanim wysyłasz mi płomienie za niezrozumienie pytania.)
Ivan
Odpowiedzi:
1038
W JavaScript undefinedoznacza , że zmienna została zadeklarowana, ale nie przypisano jej jeszcze wartości, takiej jak:
Cytat z książki Professional JS For Web Developers (Wrox): „Możesz się zastanawiać, dlaczego operator typeof zwraca„ obiekt ”dla wartości, która jest równa null. W rzeczywistości był to błąd w oryginalnej implementacji JavaScript, która została następnie skopiowana do ECMAScript. Dzisiaj , zracjonalizowane jest to, że null jest uważany za symbol zastępczy dla obiektu, chociaż technicznie jest to prymitywna wartość. ”
Captain Sensible
34
zmienna równie dobrze może nie zostać w ogóle zdefiniowana. na przykład: console.log (typeof (abc)); niezdefiniowany
Nir O.
19
Komentarz Nir O. jest bardzo ważny. Jeśli chcę mieć zmienną, która nie ma wartości na początku, piszę „... = null”, np. „Myvar = null”. W ten sposób - gdy popełniam błąd „if (myxar == null) {...}” - blok if nie jest wykonywany. Nie mam tej przewagi z undefined: myvar = undefined; myvar = 4; if (typeof myxar == "undefined") {...}
Wolfgang Adamec
11
@Wolfgang Adamec, programowanie bezbłędne nie polega na błędach.
Jorge Fuentes González
12
więc w zasadzie wartość null oznacza, że zmienna została jawnie ustawiona jako (brak wartości = null) lub została zainicjowana i zdefiniowana jako nic. Choć niezdefiniowane oznacza. prawdopodobnie nigdy nie został zainicjowany lub jeśli tak, to nigdy nie został zdefiniowany.
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==nullnull==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));
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.)undefined2.) 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.
Naprawdę dobra odpowiedź. Ale tylko dla podkreślenia, kiedy zaznaczyłeś „undefined == null”, sprawdzenie typu nie było ścisłe. Dlatego zwrócił „prawdziwy”. Jeśli zaznaczysz „undefined === null”, zwróci wartość false.
WOlVeRiNe
3
Warto zauważyć, że chociaż ten komentarz był prawdziwy w '11, wraz z pojawieniem się opcjonalnych parametrów funkcji, pojawieniem się systemów sprawdzania typu, takich jak Flow, i wszechobecności React (z których wszystkie traktują niezdefiniowane i zerowe zupełnie inaczej), stara mądrość generalnie użycie wartości null zamiast niezdefiniowanej nie jest już tak ścisłe. niezdefiniowana jest w rzeczywistości lepsza niż null w wielu przypadkach, w których chcesz jawnie użyć wartości domyślnej (np. dla opcjonalnego parametru lub opcjonalnej propozycji React).
0x24a537r9
64
(dodawanie znaków z powodu braku znaków, więc mogę to opublikować).
Czy możesz podać informację o źródle obrazu, proszę?
Vega
1
@Vega Niestety nie, nie pamiętam, skąd go wziąłem, skądinąd na imgur.com i prawdopodobnie pochodzi to z repost, a nie z ORYGINALNEGO źródła. Nawet osadzony tutaj link nie daje pojęcia, kto opublikował tę wersję, więc nie mogę jej tak naprawdę poszukać.
Sebastian Norr
1
ha ha ha ... to najlepsze wytłumaczenie, jakie kiedykolwiek widziałem! fajne!
Akbar Mirsiddikov
36
null jest specjalnym słowem kluczowym, które wskazuje na brak wartości.
myśl o tym jako o wartości, takiej jak:
„foo” to ciąg znaków,
prawda jest logiczna,
1234 to liczba,
null jest niezdefiniowany.
undefined właściwość wskazuje, że zmiennej nie przypisano również wartości null. Lubić
var foo;
zdefiniowana pusta zmienna ma nulltyp danychundefined
Oba reprezentują wartość zmiennej bez wartości
ANDnull nie reprezentuje ciągu, który nie ma wartości - pusty ciąg-
Lubić
var a ='';
console.log(typeof a);// string
console.log(a ==null);//false
console.log(a ==undefined);// false
Teraz jeśli
var a;
console.log(a ==null);//true
console.log(a ==undefined);//true
ALE
var a;
console.log(a ===null);//false
console.log(a ===undefined);// true
Więc każdy ma swój własny sposób użycia
undefined użyj go do porównania zmiennej typu danych
null użyj go do opróżnienia wartości zmiennej
var a ='javascript';
a =null;// will change the type of variable "a" from string to object
null jest także typem danych. Zarówno niezdefiniowane, jak i zerowe to typy danych i wartości
danwellman
9
nullAbsolutnie JEST typem danych: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Fakt, że typeof nullzwraca, objectjest dobrze znanym i udokumentowanym błędem we wczesnych wersjach ECMAScript, który zachował kompatybilność wsteczną. Link, który faktycznie opublikowałeś w swoim komentarzu, mówi w połowie strony „typeof null // object (błąd w ECMAScript, powinien być null)”! Więc proszę, pokażcie trochę wysiłku, zanim skomentujecie głosy
oddające
1
Definicje są sprzeczne: „brak wartości” vs „nie przypisano wartości”. Czy to nie to samo?
Zon
3
Nie zgadzam się z tą odpowiedzią. Zarówno zero, jak i niezdefiniowane są odrębnymi typami danych. null jest typu null, a niezdefiniowany jest typu niezdefiniowany. Tylko przy użyciu prawdziwego operatora (==) możemy zobaczyć, że javascript mówi, że jest to prawda, ale ścisłe porównanie (===) powoduje fałsz.
alaboudi
19
null : brak wartości dla zmiennej; nieokreślony : brak samej zmiennej;
... gdzie zmienna jest nazwą symboliczną powiązaną z wartością.
JS może być na tyle uprzejmy, że domyślnie inicjuje nowo zadeklarowane zmienne z wartością null , ale tak nie jest.
var a = {}; a.n = undefined;' then ..a.hasOwnProperty ('n') == true` ... więc powiedzenie braku samej zmiennej nie jest już poprawne
Muhammad Umer
17
Przeczytaj uważnie następujące informacje. Spowoduje to usunięcie wszystkich wątpliwości dotyczących różnicy między wartością null a niezdefiniowaną w JavaScript. Możesz także użyć funkcji użyteczności podanej poniżej, aby dokładnie określić typy.
W JavaScript możemy mieć następujące typy zmiennych.
Niezadeklarowane zmienne
Zadeklarowane, ale nieprzypisane zmienne
Zmienne przypisane dosłownie niezdefiniowane
Zmienne przypisane dosłownie null
Zmienne przypisane do niczego innego niż niezdefiniowany lub zerowy
Poniżej wyjaśniono każdy z tych przypadków jeden po drugim
Niezadeklarowane zmienne : Poniższe odnosi się do niezadeklarowanych zmiennych
Można to sprawdzić tylko za pomocą typeof (), który zwraca ciąg „undefined”
Nie można tego sprawdzić za pomocą == lub === albo operatora if lub warunkowego ? (zgłasza błąd odniesienia)
Zadeklarowane, ale nieprzypisane zmienne
typeof zwraca ciąg „undefined”
== sprawdź, czy null zwraca true
== sprawdź z niezdefiniowanymi zwrotami true
=== sprawdzenie z wartością null zwraca false
=== sprawdź z niezdefiniowanymi zwrotami true
czy czy operator warunkowy ? zwraca false
Zmienne przypisane dosłownie niezdefiniowanym : Zmienne te są traktowane podobnie jak Zmienne zadeklarowane, ale nieprzypisane .
Zmienne przypisane dosłownie null
typeof zwraca ciąg „object”
== sprawdź, czy null zwraca true
== sprawdź z niezdefiniowanymi zwrotami true
=== sprawdź, czy null zwraca true
=== sprawdź z niezdefiniowanym zwraca false
czy czy operator warunkowy ? zwraca false
Zmienne przypisane do niczego innego niż niezdefiniowany lub zerowy
typeof zwraca jeden z następujących ciągów: „ciąg” , „liczba” , „boolean” , „funkcja” , „obiekt” , „symbol”
Poniżej przedstawiono algorytm poprawnego sprawdzania typu zmiennej:
Sprawdź niezadeklarowane / nieprzypisane / przypisane z niezdefiniowanym za pomocą typeof . return, jeśli zwracany jest ciąg „undefined” .
Sprawdź wartość null za pomocą === . zwróć „null”, jeśli true .
Sprawdź rzeczywisty typ za pomocą typeof . zwracany typ, jeśli nie jest równy „obiektowi”
Wywołaj Object.prototype.toString.call (o), aby określić rzeczywisty typ obiektu. Zwraca ciąg typu „[object ObjectType]” dla wszystkich wbudowanych obiektów JavaScript lub DOM zdefiniowanych. W przypadku obiektów zdefiniowanych przez użytkownika zwraca „[Object Object]”
Możesz także użyć następującej funkcji narzędzia do określania typów. Obecnie obsługuje wszystkie typy ECMA 262 2017.
Można uznać, że niezdefiniowany reprezentuje brak wartości na poziomie systemu, nieoczekiwany lub podobny do błędu, a null reprezentuje brak wartości na poziomie programu, normalny lub oczekiwany.
1 - Uncaught ReferenceError: zmienna nie została zadeklarowana w twoim skrypcie, nie ma odniesienia do tej zmiennej
2 - undefined: Zmienna zadeklarowana, ale nie została zainicjowana
3 - null: Zmienna zadeklarowana i jest pustą wartością
null i undefined to dwa różne typy obiektów, które mają następujące wspólne cechy:
oba mogą zawierać tylko jedną wartość, odpowiednio zerową i niezdefiniowaną ;
obie nie mają właściwości ani metod, a próba odczytania którejkolwiek z nich spowoduje błąd w czasie wykonywania (dla wszystkich innych obiektów wartość będzie niezdefiniowana, jeśli spróbujesz odczytać nieistniejącą właściwość);
Wartości NULL i nieokreślone są uznawane za równe sobie nawzajem i do niczego innego przez ==i !=operatorów.
Podobieństwa jednak kończą się tutaj. Po raz pierwszy istnieje zasadnicza różnica w sposobie implementacji słów kluczowych null i undefined . Nie jest to oczywiste, ale rozważ następujący przykład:
varundefined="foo";WScript.Echo(undefined);// This will print: foo
undefined , NaN i Infinity to tylko nazwy wstępnie zainicjowanych zmiennych „superglobalnych” - są one inicjalizowane w czasie wykonywania i mogą zostać zastąpione przez normalną zmienną globalną lub lokalną o tych samych nazwach.
Teraz spróbujmy tego samego z zerą :
varnull="foo";// This will cause a compile-time errorWScript.Echo(null);
Ups! null , true i false są zastrzeżonymi słowami kluczowymi - kompilator nie pozwoli na użycie ich jako nazw zmiennych lub właściwości
Inna różnica polega na tym, że niezdefiniowany jest typ pierwotny, a null jest typem obiektu (co wskazuje na brak odwołania do obiektu). Rozważ następujące:
WScript.Echo(typeoffalse);// Will print: booleanWScript.Echo(typeof0);// Will print: numberWScript.Echo(typeof"");// Will print: stringWScript.Echo(typeof{});// Will print: objectWScript.Echo(typeofundefined);// Will print: undefinedWScript.Echo(typeofnull);// (!!!) Will print: object
Istnieje również istotna różnica w sposobie traktowania wartości null i undefined w kontekście numerycznym:
var a;// declared but uninitialized variables hold the value undefinedWScript.Echo(a ===undefined);// Prints: -1var b =null;// the value null must be explicitly assigned WScript.Echo(b ===null);// Prints: -1WScript.Echo(a == b);// Prints: -1 (as expected)WScript.Echo(a >= b);// Prints: 0 (WTF!?)WScript.Echo(a >= a);// Prints: 0 (!!!???)WScript.Echo(isNaN(a));// Prints: -1 (a evaluates to NaN!)WScript.Echo(1*a);// Prints: -1.#IND (in Echo output this means NaN)WScript.Echo(b >= b);// Prints: -1 (as expected)WScript.Echo(isNaN(b));// Prints: 0 (b evaluates to a valid number)WScript.Echo(1*b);// Prints: 0 (b evaluates to 0)WScript.Echo(a >=0&& a <=0);// Prints: 0 (as expected)WScript.Echo(a ==0);// Prints: 0 (as expected)WScript.Echo(b >=0&& b <=0);// Prints: -1 (as expected)WScript.Echo(b ==0);// Prints: 0 (!!!)
null staje się 0, gdy jest używany w wyrażeniach arytmetycznych lub porównaniach numerycznych - podobnie jak false , jest to po prostu specjalny rodzaj „zero”. z drugiej strony undefined jest prawdziwym „niczym” i staje się NaN („nie liczbą”), gdy próbujesz go użyć w kontekście numerycznym.
Zauważ, że wartość null i niezdefiniowanych otrzymać specjalne traktowanie ze ==i !=operatorów, ale można przetestować prawdziwej równości numeryczną i B z ekspresją .(a >= b && a <= b)
Jeśli wiesz, że zmienna jest tylko liczbą podczas całego cyklu życia, zgodnie z konwencją, możesz ją zainicjować, aby 0(lub NaNjeśli 0jest to ważna wartość w użyciu):
Uwaga: inteligentne użycie off null ma być fałszywą wersją Object, ponieważ Object jest zawsze truei ponieważ typeof nullreturn object. Oznacza to typeof myVarObjectzwrócenie spójnej wartości zarówno dla typu Object, jak i null.
Wszystko
Jeśli wiesz, że zmienna ma typ mieszany (dowolny typ podczas całego cyklu życia), zgodnie z konwencją, możesz ją zainicjować undefined.
Należy zauważyć, że chociaż undefinedmoże to oznaczać, że zmienna nie została zadeklarowana, ale nie gwarantuje tego. Zmienna może być zadeklarowana jako var thing;i będzie równa undefined.
Yura,
6
Najlepszym sposobem na zrozumienie różnicy jest najpierw oczyszczenie umysłu z wewnętrznego działania JavaScript i zrozumienie różnic w znaczeniu między:
let supervisor ="None"// I have a supervisor named "None"let supervisor =null// I do NOT have a supervisor. It is a FACT that I do not.let supervisor =undefined// I may or may not have a supervisor. I either don't know// if I do or not, or I am choosing not to tell you. It is// irrelevant or none of your business.
Istnieje różnica w znaczeniu między tymi trzema przypadkami, a JavaScript rozróżnia ostatnie dwa przypadki za pomocą dwóch różnych wartości nulloraz undefined. Możesz swobodnie wykorzystywać te wartości, aby przekazać te znaczenia.
Więc jakie są niektóre problemy specyficzne dla JavaScript, które powstają z powodu tej filozoficznej podstawy?
Zadeklarowana zmienna bez inicjatora otrzymuje wartość, undefinedponieważ nigdy nie mówiłeś nic o tym, jaka była zamierzona wartość.
let supervisor;
assert(supervisor ===undefined);
Ocenia się właściwość obiektu, który nigdy nie został ustawiony, undefinedponieważ nikt nigdy nie powiedział nic o tej właściwości.
const dog ={ name:'Sparky', age:2};
assert(dog.breed ===undefined);
nulli undefinedsą do siebie „podobni”, ponieważ tak powiedziała Brendan Eich. Ale zdecydowanie nie są sobie równi.
nulli na undefinedszczęście mają różne typy. nullnależy do typu Nulli undefineddo typu Undefined. To jest specyfikacja, ale nigdy nie dowiesz się tego z powodu typeofdziwności, której nie powtórzę tutaj.
Funkcja osiągająca koniec swojego ciała bez wyraźnej instrukcji return zwraca, undefinedponieważ nic nie wiesz o tym, co zwróciła.
Nawiasem mówiąc, istnieją inne formy „nicości” w JavaScript (dobrze jest studiować filozofię ....)
NaN
Korzystanie ze zmiennej, która nigdy nie została zadeklarowana, i odbieranie ReferenceError
Użycie letlub constzdefiniowanej zmiennej lokalnej w jej czasowej martwej strefie i otrzymanie aReferenceError
Puste komórki w rzadkich tablicach. Tak, nie są one nawet undefinedporównywalne ===z niezdefiniowanymi.
$ node
>const a =[1,undefined,2]>const b =[1,,2]> a
[1,undefined,2]> b
[1,<1 empty item>,2]
Najlepsza odpowiedź! Większość odpowiedzi ignoruje fakt, że można zdefiniować wartość zmiennej takundefined jak w let supervisor = undefinedprzypadku.
J. Bruni
Dziękuję, i tak, to błędne przekonanie, że coś jest undefinedtylko wtedy, gdy nie zostało zadeklarowane lub nie zostało jeszcze nadane wartości, jest tak powszechne i naprawdę trudno jest dotrzeć do ludzi (choć ciągle próbuję). Tak wielu ludzi śmieci JavaScript za posiadające obydwie nulla undefinedjednak wartości te nie mają całkowicie odmienne znaczenia, a dla większości działają one dobrze z zamierzonych znaczeń (IMHO oczywiście).
Ray Toal
5
W języku JavaScript istnieje 5 prymitywnych typów danych: String, Number, Boolean, null i undefined. Spróbuję wyjaśnić na prostym przykładzie
powiedzmy, że mamy prostą funkcję
function test(a){if(a ==null){
alert("a is null");}else{
alert("The value of a is "+ a);}}
również w powyższej funkcji, jeśli (a == null) jest taki sam jak if (! a)
teraz, gdy wywołujemy tę funkcję bez podania parametru a
test(); it will alert "a is null";
test(4); it will alert "The value of a is "+4;
również
var a;
alert(typeof a);
da to niezdefiniowane; zadeklarowaliśmy zmienną, ale nie przypisaliśmy żadnej wartości do tej zmiennej; ale jeśli napiszemy
var a =null;
alert(typeof a); will give alert as object
więc null jest obiektem. w sposób, w jaki przypisaliśmy wartość null do „a”
Dla undefinedtypu, istnieje jedna i tylko jedna wartość: undefined.
Dla nulltypu, istnieje jedna i tylko jedna wartość: null.
Tak więc dla obu z nich etykieta jest zarówno rodzajem, jak i wartością.
Różnica między nimi. Na przykład:
null jest pustą wartością
undefined jest brakującą wartością
Lub:
undefined nie ma jeszcze wartości
null miał wartość i już nie ma
W rzeczywistości nulljest to specjalne słowo kluczowe , a nie identyfikator, dlatego nie można traktować go jako zmiennej do przypisania.
Jednak undefinedjest identyfikator . Jednak zarówno w non-stricttrybie, jak i stricttrybie można utworzyć lokalną zmienną o nieokreślonej nazwie. Ale to jeden okropny pomysł!
function foo(){undefined=2;// bad idea!}
foo();function foo(){"use strict";undefined=2;// TypeError!}
foo();
Kiedy deklarujesz zmienną w javascript, przypisywana jest wartość undefined. Oznacza to, że zmienna jest nietknięta i można jej przypisać dowolną wartość w przyszłości. Oznacza to również, że nie znasz wartości, którą ta zmienna będzie przechowywać w momencie deklaracji.
Teraz możesz jawnie przypisać zmienną null. Oznacza to, że zmienna nie ma żadnej wartości. Na przykład - niektóre osoby nie mają drugiego imienia. W takim przypadku lepiej jest przypisać wartość null do zmiennej środkowej nazwy obiektu osoby.
Załóżmy teraz, że ktoś uzyskuje dostęp do zmiennej middlename obiektu osoby i ma ona wartość undefined. Nie wiedziałby, czy programista zapomniał zainicjować tę zmienną, czy też nie ma ona żadnej wartości. Jeśli ma wartość null, użytkownik może łatwo wywnioskować, że nazwa środkowa nie ma żadnej wartości i nie jest zmienną nietkniętą.
niezdefiniowane właściwości obiektu są również niezdefiniowane. Na przykład „x” nie jest zdefiniowane na obiekcie c, a jeśli spróbujesz uzyskać dostęp do cx, zwróci niezdefiniowane.
„Ogólnie rzecz biorąc, jeśli musisz przypisać wartość inną do zmiennej lub właściwości, przekazać ją do funkcji lub zwrócić z funkcji, null jest prawie zawsze najlepszą opcją. Mówiąc prosto, JavaScript używa niezdefiniowanej i programiści powinni użyj null. ”
Zarówno Null, jak i niezdefiniowane w JavaScript wskazują brak wartości.
var a =null;//variable assigned null valuevar b;// undefined
Pomimo faktu, że oba istnieją z powodu braku wartości, ale: Niezdefiniowane w rzeczywistości oznacza, że zmienna nie jest inicjowana. Funkcje, które nic nie zwracają, i parametry funkcji, dla których nie podano żadnej wartości, zwracana jest niezdefiniowana wartość. Użyj operatora ścisłej równości ===, aby odróżnić wartość null od niezdefiniowanej.
OK, możemy się mylić, gdy słyszymy o null, a undefined, ale zacznijmy to proste, oboje są falsy i podobne pod wieloma względami, ale dziwne część JavaScript, uczynić je kilka istotnych różnic, na przykład, typeofnull jest 'object'natomiast typeofundefined jest 'undefined'.
Ponieważ typeof zwraca undefined, undefined jest typem, w którym null jest inicjatorem, który wskazuje, że zmienna wskazuje na żaden obiekt (praktycznie wszystko w Javascript jest obiektem).
W javascript wszystkie zmienne są przechowywane jako pary klucz-wartość. Każda zmienna jest przechowywana jako nazwa zmiennej: wartość_zmiennej / referencja .
undefined oznacza, że zmienna otrzymała miejsce w pamięci, ale nie przypisano jej żadnej wartości. Jako najlepszą praktykę nie należy używać tego typu jako zadania.
W takim przypadku, jak określić, kiedy zmienna ma być bez wartości w późniejszym punkcie kodu? Możesz użyć typu
null , który jest także typem używanym do zdefiniowania tej samej rzeczy, braku wartości, ale nie jest to to samo, co niezdefiniowane, ponieważ w tym przypadku faktycznie masz wartość w pamięci. Ta wartość jest zerowa
Chcę dodać bardzo subtelną różnicę pomiędzy nulli undefinedktóry jest dobry, aby wiedzieć, kiedy próbuje się nauczyć Vanilla JavaScript (JS) od podstaw:
nulljest zarezerwowanym słowem kluczowym w JS, podczas gdy undefinedjest zmienną globalnego obiektu środowiska wykonawczego, w którym się znajdujesz.
Podczas pisania kodu tej różnicy nie można zidentyfikować jako obu nulli undefinedzawsze są one używane w RHS instrukcji JavaScript. Ale kiedy używasz ich w LHS wyrażenia, możesz łatwo zauważyć tę różnicę. Dlatego interpreter JS interpretuje poniższy kod jako błąd:
varnull='foo'
Daje poniżej błędu:
Uncaught SyntaxError: Nieoczekiwany token null
Chociaż poniższy kod działa poprawnie, chociaż nie polecam tego robić w prawdziwym życiu:
varundefined='bar'
Działa undefinedto, ponieważ jest zmienną obiektu globalnego (obiekt okna przeglądarki w przypadku JS po stronie klienta)
undefined='bar'tak naprawdę nie przypisuje żadnej wartości undefined(która jest niezmienna), po prostu nie rzuca błędu w błąd.
Dmitri Zaitsev,
1
Różnica między undefinedi nulljest minimalna, ale jest różnica. Zmienna, której wartość undefinednigdy nie została zainicjowana. Zmienna, której wartość nullzostała jawnie podana wartość null, co oznacza, że zmienna została jawnie ustawiona na brak wartości. Jeśli porównasz undefinedi nullużywając null==undefinedwyrażenia, będą one równe.
Ta odpowiedź jest myląca ... patrz dyskusja w zaakceptowanej odpowiedzi. Podsumowując - null==undefinedjest to truetylko z powodu niejawnego rzutowania (lub równoważnego terminu w JS). Najwyraźniej null===undefinedjest tak falsedlatego , że użycie, gdy ===go używasz , porównuje również typ .
guyarad
1
Zasadniczo Undefined jest zmienną globalną, którą javascript tworzy w czasie wykonywania, niezależnie od tego, czy null oznacza, że żadna wartość nie została przypisana do zmiennej (w rzeczywistości sam null jest obiektem).
Weźmy przykład:
var x;//we declared a variable x, but no value has been assigned to it.
document.write(x)//let's print the variable x
Niezdefiniowane , to otrzymasz jako wynik.
Teraz,
x=5;
y=null;
z=x+y;
a otrzymasz 5 jako wynik. To główna różnica między niezdefiniowanym a zerowym
Z tego faktycznie dowiedziałem się, że isNaN(null)powraca false- co mnie zaskoczyło.
J. Bruni
0
Obie wartości specjalne oznaczają stan pusty.
Główną różnicą jest to, że niezdefiniowana reprezentuje wartość zmiennej, która nie została jeszcze zainicjowana, a null oznacza celową nieobecność obiektu.
Numer zmiennej jest zdefiniowany, jednak nie ma przypisanej wartości początkowej:
let number;
number;// => undefined
zmienna liczbowa jest niezdefiniowana, co wyraźnie wskazuje na niezainicjowaną zmienną
Ta sama niezainicjowana koncepcja ma miejsce, gdy uzyskuje się dostęp do nieistniejącej właściwości obiektu:
Ponieważ właściwość lastName nie istnieje w obj, JavaScript poprawnie ocenia obj.lastName na niezdefiniowany.
W innych przypadkach wiadomo, że zmienna oczekuje, że zatrzyma obiekt lub funkcję, aby zwrócić obiekt. Ale z jakiegoś powodu nie można utworzyć instancji obiektu. W takim przypadku wartość null jest znaczącym wskaźnikiem brakującego obiektu.
Na przykład clone () to funkcja, która klonuje zwykły obiekt JavaScript. Oczekuje się, że funkcja zwróci obiekt:
Jednak funkcja clone () może zostać wywołana z argumentem nieobiektywnym: 15 lub null (lub ogólnie prymitywną wartością, null lub undefined). W takim przypadku funkcja nie może utworzyć klonu, więc zwraca null - wskaźnik brakującego obiektu.
Jeśli zmienna nie zostanie zainicjowana, wówczas jest niezdefiniowana. niezdefiniowany nie jest przedmiotem. Przykład: var MyName; console.log (typeof MyName);
Sprawdź narzędzie do programowania logowania do konsoli, zostanie wydrukowane jako niezdefiniowane.
null jest obiektem. Jeśli chcesz, aby jakaś zmienna była null, wówczas używana jest null. zmienna null istnieje, ale wartość nie jest znana. Powinna być przypisana do zmiennej programowo. wartość null nie jest automatycznie inicjowana.
Przykład: var MyName = null; console.log (typeof MyName); Sprawdź dziennik csole w narzędziu programistycznym, będzie to obiekt.
null
w JavaScript jest wartość?null
czy ustawiłeś go na pusty,undefined
jest pusty, ponieważ nie został ustawiony. Lubnull
jest celowo pusty, podczas gdyundefined
wciąż jest pusty. Zasadniczo pokazuje zamiar.Odpowiedzi:
W JavaScript
undefined
oznacza , że zmienna została zadeklarowana, ale nie przypisano jej jeszcze wartości, takiej jak:null
jest wartością przypisania. Może być przypisany do zmiennej jako reprezentacja bez wartości:Z powyższych przykładów, jest oczywiste, że
undefined
inull
dwa różne typy:undefined
to samo (nieokreślony) typu, anull
celem.i
źródło
Wybrałem to stąd
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ę:
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:
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:
Uruchomienie powyższego skryptu spowoduje następujące wyniki:
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.
Wynikiem powyższego skryptu jest:
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.
źródło
(dodawanie znaków z powodu braku znaków, więc mogę to opublikować).
źródło
null jest specjalnym słowem kluczowym, które wskazuje na brak wartości.
myśl o tym jako o wartości, takiej jak:
undefined właściwość wskazuje, że zmiennej nie przypisano również wartości null. Lubić
zdefiniowana pusta zmienna ma
null
typ danychundefined
Oba reprezentują wartość zmiennej bez wartości
AND
null
nie reprezentuje ciągu, który nie ma wartości - pusty ciąg-Lubić
Teraz jeśli
ALE
Więc każdy ma swój własny sposób użycia
undefined użyj go do porównania zmiennej typu danych
null użyj go do opróżnienia wartości zmiennej
źródło
null
Absolutnie JEST typem danych: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx. Fakt, żetypeof null
zwraca,object
jest dobrze znanym i udokumentowanym błędem we wczesnych wersjach ECMAScript, który zachował kompatybilność wsteczną. Link, który faktycznie opublikowałeś w swoim komentarzu, mówi w połowie strony „typeof null // object (błąd w ECMAScript, powinien być null)”! Więc proszę, pokażcie trochę wysiłku, zanim skomentujecie głosynull : brak wartości dla zmiennej; nieokreślony : brak samej zmiennej;
... gdzie zmienna jest nazwą symboliczną powiązaną z wartością.
JS może być na tyle uprzejmy, że domyślnie inicjuje nowo zadeklarowane zmienne z wartością null , ale tak nie jest.
źródło
var a = {}; a.n = undefined;' then ..
a.hasOwnProperty ('n') == true` ... więc powiedzenie braku samej zmiennej nie jest już poprawnePrzeczytaj uważnie następujące informacje. Spowoduje to usunięcie wszystkich wątpliwości dotyczących różnicy między wartością null a niezdefiniowaną w JavaScript. Możesz także użyć funkcji użyteczności podanej poniżej, aby dokładnie określić typy.
W JavaScript możemy mieć następujące typy zmiennych.
Poniżej wyjaśniono każdy z tych przypadków jeden po drugim
Niezadeklarowane zmienne : Poniższe odnosi się do niezadeklarowanych zmiennych
Zadeklarowane, ale nieprzypisane zmienne
Zmienne przypisane dosłownie niezdefiniowanym : Zmienne te są traktowane podobnie jak Zmienne zadeklarowane, ale nieprzypisane .
Zmienne przypisane dosłownie null
Zmienne przypisane do niczego innego niż niezdefiniowany lub zerowy
Poniżej przedstawiono algorytm poprawnego sprawdzania typu zmiennej:
Możesz także użyć następującej funkcji narzędzia do określania typów. Obecnie obsługuje wszystkie typy ECMA 262 2017.
źródło
przez JavaScript: Przewodnik definitywny
źródło
Wytłumaczę
undefined
,null
iUncaught ReferenceError
:1 -
Uncaught ReferenceError
: zmienna nie została zadeklarowana w twoim skrypcie, nie ma odniesienia do tej zmiennej2 -
undefined
: Zmienna zadeklarowana, ale nie została zainicjowana3 -
null
: Zmienna zadeklarowana i jest pustą wartościąźródło
Niezdefiniowana oznacza, że zmienna została zadeklarowana, ale nie ma żadnej wartości:
Null to zadanie:
źródło
null i undefined to dwa różne typy obiektów, które mają następujące wspólne cechy:
==
i!=
operatorów.Podobieństwa jednak kończą się tutaj. Po raz pierwszy istnieje zasadnicza różnica w sposobie implementacji słów kluczowych null i undefined . Nie jest to oczywiste, ale rozważ następujący przykład:
undefined , NaN i Infinity to tylko nazwy wstępnie zainicjowanych zmiennych „superglobalnych” - są one inicjalizowane w czasie wykonywania i mogą zostać zastąpione przez normalną zmienną globalną lub lokalną o tych samych nazwach.
Teraz spróbujmy tego samego z zerą :
Ups! null , true i false są zastrzeżonymi słowami kluczowymi - kompilator nie pozwoli na użycie ich jako nazw zmiennych lub właściwości
Inna różnica polega na tym, że niezdefiniowany jest typ pierwotny, a null jest typem obiektu (co wskazuje na brak odwołania do obiektu). Rozważ następujące:
Istnieje również istotna różnica w sposobie traktowania wartości null i undefined w kontekście numerycznym:
null staje się 0, gdy jest używany w wyrażeniach arytmetycznych lub porównaniach numerycznych - podobnie jak false , jest to po prostu specjalny rodzaj „zero”. z drugiej strony undefined jest prawdziwym „niczym” i staje się NaN („nie liczbą”), gdy próbujesz go użyć w kontekście numerycznym.
Zauważ, że wartość null i niezdefiniowanych otrzymać specjalne traktowanie ze
==
i!=
operatorów, ale można przetestować prawdziwej równości numeryczną i B z ekspresją .(a >= b && a <= b)
źródło
tl; dr
Użyj
null
do ustawienia zmiennej, o której wiesz, że jest obiektem.Użyj
undefined
do ustawienia zmiennej, której typ jest mieszany.To jest moje użycie zarówno 5 prymitywów, jak i typu Object, i to wyjaśnia różnicę między «przypadkiem użycia»
undefined
lubnull
.Strunowy
Jeśli wiesz, że zmienna jest tylko łańcuchem podczas całego cyklu życia, zgodnie z konwencją, możesz ją zainicjować, aby
""
:Numer
Jeśli wiesz, że zmienna jest tylko liczbą podczas całego cyklu życia, zgodnie z konwencją, możesz ją zainicjować, aby
0
(lubNaN
jeśli0
jest to ważna wartość w użyciu):lub
Boolean
Jeśli wiesz, że zmienna jest tylko wartością logiczną podczas całego cyklu życia, zgodnie z konwencją, możesz ją zainicjować, aby
false
:Obiekt
Jeśli wiesz, że zmienna jest tylko obiektem podczas całego cyklu życia, zgodnie z konwencją, możesz ją zainicjować, aby
null
:Uwaga: inteligentne użycie off null ma być fałszywą wersją Object, ponieważ Object jest zawsze
true
i ponieważtypeof null
returnobject
. Oznacza totypeof myVarObject
zwrócenie spójnej wartości zarówno dla typu Object, jak i null.Wszystko
Jeśli wiesz, że zmienna ma typ mieszany (dowolny typ podczas całego cyklu życia), zgodnie z konwencją, możesz ją zainicjować
undefined
.źródło
null
to specjalna wartość oznaczająca „brak wartości”.null
jest obiektem specjalnym, ponieważtypeof null
zwraca „obiekt”.Z drugiej strony
undefined
oznacza, że zmienna nie została zadeklarowana lub nie otrzymała żadnej wartości.źródło
undefined
może to oznaczać, że zmienna nie została zadeklarowana, ale nie gwarantuje tego. Zmienna może być zadeklarowana jakovar thing;
i będzie równaundefined
.Najlepszym sposobem na zrozumienie różnicy jest najpierw oczyszczenie umysłu z wewnętrznego działania JavaScript i zrozumienie różnic w znaczeniu między:
Istnieje różnica w znaczeniu między tymi trzema przypadkami, a JavaScript rozróżnia ostatnie dwa przypadki za pomocą dwóch różnych wartości
null
orazundefined
. Możesz swobodnie wykorzystywać te wartości, aby przekazać te znaczenia.Więc jakie są niektóre problemy specyficzne dla JavaScript, które powstają z powodu tej filozoficznej podstawy?
Zadeklarowana zmienna bez inicjatora otrzymuje wartość,
undefined
ponieważ nigdy nie mówiłeś nic o tym, jaka była zamierzona wartość.Ocenia się właściwość obiektu, który nigdy nie został ustawiony,
undefined
ponieważ nikt nigdy nie powiedział nic o tej właściwości.null
iundefined
są do siebie „podobni”, ponieważ tak powiedziała Brendan Eich. Ale zdecydowanie nie są sobie równi.null
i naundefined
szczęście mają różne typy.null
należy do typuNull
iundefined
do typuUndefined
. To jest specyfikacja, ale nigdy nie dowiesz się tego z powodutypeof
dziwności, której nie powtórzę tutaj.Funkcja osiągająca koniec swojego ciała bez wyraźnej instrukcji return zwraca,
undefined
ponieważ nic nie wiesz o tym, co zwróciła.Nawiasem mówiąc, istnieją inne formy „nicości” w JavaScript (dobrze jest studiować filozofię ....)
NaN
ReferenceError
let
lubconst
zdefiniowanej zmiennej lokalnej w jej czasowej martwej strefie i otrzymanie aReferenceError
Puste komórki w rzadkich tablicach. Tak, nie są one nawet
undefined
porównywalne===
z niezdefiniowanymi.źródło
undefined
jak wlet supervisor = undefined
przypadku.undefined
tylko wtedy, gdy nie zostało zadeklarowane lub nie zostało jeszcze nadane wartości, jest tak powszechne i naprawdę trudno jest dotrzeć do ludzi (choć ciągle próbuję). Tak wielu ludzi śmieci JavaScript za posiadające obydwienull
aundefined
jednak wartości te nie mają całkowicie odmienne znaczenia, a dla większości działają one dobrze z zamierzonych znaczeń (IMHO oczywiście).W języku JavaScript istnieje 5 prymitywnych typów danych: String, Number, Boolean, null i undefined. Spróbuję wyjaśnić na prostym przykładzie
powiedzmy, że mamy prostą funkcję
również w powyższej funkcji, jeśli (a == null) jest taki sam jak if (! a)
teraz, gdy wywołujemy tę funkcję bez podania parametru a
również
da to niezdefiniowane; zadeklarowaliśmy zmienną, ale nie przypisaliśmy żadnej wartości do tej zmiennej; ale jeśli napiszemy
więc null jest obiektem. w sposób, w jaki przypisaliśmy wartość null do „a”
źródło
Dla
undefined
typu, istnieje jedna i tylko jedna wartość:undefined
.Dla
null
typu, istnieje jedna i tylko jedna wartość:null
.Tak więc dla obu z nich etykieta jest zarówno rodzajem, jak i wartością.
Różnica między nimi. Na przykład:
null
jest pustą wartościąundefined
jest brakującą wartościąLub:
undefined
nie ma jeszcze wartościnull
miał wartość i już nie maW rzeczywistości
null
jest to specjalne słowo kluczowe , a nie identyfikator, dlatego nie można traktować go jako zmiennej do przypisania.Jednak
undefined
jest identyfikator . Jednak zarówno wnon-strict
trybie, jak istrict
trybie można utworzyć lokalną zmienną o nieokreślonej nazwie. Ale to jeden okropny pomysł!źródło
Kiedy deklarujesz zmienną w javascript, przypisywana jest wartość
undefined
. Oznacza to, że zmienna jest nietknięta i można jej przypisać dowolną wartość w przyszłości. Oznacza to również, że nie znasz wartości, którą ta zmienna będzie przechowywać w momencie deklaracji.Teraz możesz jawnie przypisać zmienną
null
. Oznacza to, że zmienna nie ma żadnej wartości. Na przykład - niektóre osoby nie mają drugiego imienia. W takim przypadku lepiej jest przypisać wartość null do zmiennej środkowej nazwy obiektu osoby.Załóżmy teraz, że ktoś uzyskuje dostęp do zmiennej middlename obiektu osoby i ma ona wartość
undefined
. Nie wiedziałby, czy programista zapomniał zainicjować tę zmienną, czy też nie ma ona żadnej wartości. Jeśli ma wartośćnull
, użytkownik może łatwo wywnioskować, że nazwa środkowa nie ma żadnej wartości i nie jest zmienną nietkniętą.źródło
zarówno null, jak i undefined są używane do reprezentowania braku pewnej wartości.
a jest inicjowany i definiowany.
null to obiekt w JavaScript
b jest niezdefiniowany i niezainicjowany
niezdefiniowane właściwości obiektu są również niezdefiniowane. Na przykład „x” nie jest zdefiniowane na obiekcie c, a jeśli spróbujesz uzyskać dostęp do cx, zwróci niezdefiniowane.
Zasadniczo przypisujemy null zmiennym niezdefiniowanym.
źródło
Object.prototype.toString.call(null); // "[object Null]"
Dokładny artykuł Per Ryana Morra na ten temat ...
„Ogólnie rzecz biorąc, jeśli musisz przypisać wartość inną do zmiennej lub właściwości, przekazać ją do funkcji lub zwrócić z funkcji, null jest prawie zawsze najlepszą opcją. Mówiąc prosto, JavaScript używa niezdefiniowanej i programiści powinni użyj null. ”
Zobacz Eksplorowanie wiecznej otchłani zerowej i niezdefiniowanej
źródło
Odniesienie: http://www.thesstech.com/javascript/null-and-undefined
źródło
OK, możemy się mylić, gdy słyszymy o
null
, aundefined
, ale zacznijmy to proste, oboje są falsy i podobne pod wieloma względami, ale dziwne część JavaScript, uczynić je kilka istotnych różnic, na przykład, typeofnull
jest'object'
natomiast typeofundefined
jest'undefined'
.Ale jeśli sprawdzisz je
==
, jak pokazano poniżej, zobaczysz, że oba są fałszywe :Możesz także przypisać
null
właściwość obiektu lub element pierwotny, aundefined
po prostu można to osiągnąć, nie przypisując niczego.Tworzę szybki obraz, aby pokazać różnice dla Ciebie na pierwszy rzut oka.
źródło
Ponieważ typeof zwraca undefined, undefined jest typem, w którym null jest inicjatorem, który wskazuje, że zmienna wskazuje na żaden obiekt (praktycznie wszystko w Javascript jest obiektem).
źródło
W javascript wszystkie zmienne są przechowywane jako pary klucz-wartość. Każda zmienna jest przechowywana jako nazwa zmiennej: wartość_zmiennej / referencja .
undefined oznacza, że zmienna otrzymała miejsce w pamięci, ale nie przypisano jej żadnej wartości. Jako najlepszą praktykę nie należy używać tego typu jako zadania.
W takim przypadku, jak określić, kiedy zmienna ma być bez wartości w późniejszym punkcie kodu? Możesz użyć typu null , który jest także typem używanym do zdefiniowania tej samej rzeczy, braku wartości, ale nie jest to to samo, co niezdefiniowane, ponieważ w tym przypadku faktycznie masz wartość w pamięci. Ta wartość jest zerowa
Oba są podobne, ale użycie i znaczenie są różne.
źródło
Chcę dodać bardzo subtelną różnicę pomiędzy
null
iundefined
który jest dobry, aby wiedzieć, kiedy próbuje się nauczyć Vanilla JavaScript (JS) od podstaw:null
jest zarezerwowanym słowem kluczowym w JS, podczas gdyundefined
jest zmienną globalnego obiektu środowiska wykonawczego, w którym się znajdujesz.Podczas pisania kodu tej różnicy nie można zidentyfikować jako obu
null
iundefined
zawsze są one używane w RHS instrukcji JavaScript. Ale kiedy używasz ich w LHS wyrażenia, możesz łatwo zauważyć tę różnicę. Dlatego interpreter JS interpretuje poniższy kod jako błąd:Daje poniżej błędu:
Chociaż poniższy kod działa poprawnie, chociaż nie polecam tego robić w prawdziwym życiu:
Działa
undefined
to, ponieważ jest zmienną obiektu globalnego (obiekt okna przeglądarki w przypadku JS po stronie klienta)źródło
undefined='bar'
tak naprawdę nie przypisuje żadnej wartościundefined
(która jest niezmienna), po prostu nie rzuca błędu w błąd.Różnica między
undefined
inull
jest minimalna, ale jest różnica. Zmienna, której wartośćundefined
nigdy nie została zainicjowana. Zmienna, której wartośćnull
została jawnie podana wartośćnull
, co oznacza, że zmienna została jawnie ustawiona na brak wartości. Jeśli porównaszundefined
inull
używającnull==undefined
wyrażenia, będą one równe.źródło
null==undefined
jest totrue
tylko z powodu niejawnego rzutowania (lub równoważnego terminu w JS). Najwyraźniejnull===undefined
jest takfalse
dlatego , że użycie, gdy===
go używasz , porównuje również typ .Zasadniczo Undefined jest zmienną globalną, którą javascript tworzy w czasie wykonywania, niezależnie od tego, czy null oznacza, że żadna wartość nie została przypisana do zmiennej (w rzeczywistości sam null jest obiektem).
Weźmy przykład:
Niezdefiniowane , to otrzymasz jako wynik.
Teraz,
a otrzymasz 5 jako wynik. To główna różnica między niezdefiniowanym a zerowym
źródło
null - Jest to wartość przypisania, która jest używana ze zmienną do reprezentowania żadnej wartości (jest to obiekt).
undefined - jest to zmienna, która nie ma przypisanej żadnej wartości, więc JavaScript przypisze jej niezdefiniowaną wartość (jest to typ danych).
niezadeklarowana - jeśli zmienna w ogóle nie zostanie utworzona, jest znana jako niezadeklarowana.
źródło
Spójrz na to. Wynik jest wart tysiąca słów.
Zobacz też:
Twoje zdrowie!
źródło
isNaN(null)
powracafalse
- co mnie zaskoczyło.Obie wartości specjalne oznaczają stan pusty.
Główną różnicą jest to, że niezdefiniowana reprezentuje wartość zmiennej, która nie została jeszcze zainicjowana, a null oznacza celową nieobecność obiektu.
W innych przypadkach wiadomo, że zmienna oczekuje, że zatrzyma obiekt lub funkcję, aby zwrócić obiekt. Ale z jakiegoś powodu nie można utworzyć instancji obiektu. W takim przypadku wartość null jest znaczącym wskaźnikiem brakującego obiektu.
Na przykład clone () to funkcja, która klonuje zwykły obiekt JavaScript. Oczekuje się, że funkcja zwróci obiekt:
Jednak funkcja clone () może zostać wywołana z argumentem nieobiektywnym: 15 lub null (lub ogólnie prymitywną wartością, null lub undefined). W takim przypadku funkcja nie może utworzyć klonu, więc zwraca null - wskaźnik brakującego obiektu.
źródło
Oprócz innego znaczenia istnieją inne różnice:
null
ale pomijaundefined
źródło
Jeśli zmienna nie zostanie zainicjowana, wówczas jest niezdefiniowana. niezdefiniowany nie jest przedmiotem. Przykład: var MyName; console.log (typeof MyName);
Sprawdź narzędzie do programowania logowania do konsoli, zostanie wydrukowane jako niezdefiniowane.
null jest obiektem. Jeśli chcesz, aby jakaś zmienna była null, wówczas używana jest null. zmienna null istnieje, ale wartość nie jest znana. Powinna być przypisana do zmiennej programowo. wartość null nie jest automatycznie inicjowana.
Przykład: var MyName = null; console.log (typeof MyName); Sprawdź dziennik csole w narzędziu programistycznym, będzie to obiekt.
źródło