Jak sprawdzić zmienną, jeśli jest
null
lubundefined
jaka jest różnica międzynull
iundefined
?Jaka jest różnica między
==
i===
(trudno wyszukiwać w Google „===”)?
javascript
null
undefined
MUG4N
źródło
źródło
==
i===
jest tutaj dobrze opisana .Odpowiedzi:
Czy zmienna
null
:... ale zauważ, że to ostatnie będzie również prawdą, jeśli tak
a
jestundefined
.Czy to jest
undefined
:... ale znowu zauważ, że ostatni jest niejasny; będzie to również prawdą, jeśli tak
a
jestnull
.Teraz, pomimo powyższego, zwykłym sposobem na sprawdzenie tych jest skorzystanie z faktu, że są falsey :
Jest to zdefiniowane przez ToBoolean w specyfikacji.
Obie wartości są zwykle używane do wskazania braku czegoś.
undefined
jest bardziej ogólna, używana jako domyślna wartość zmiennych, dopóki nie zostanie im przypisana inna wartość, jako wartość argumentów funkcji, które nie zostały podane, gdy funkcja została wywołana, i jako wartość, którą otrzymujesz, gdy pytasz obiekt dla nieruchomości, której nie ma. Ale może być również wyraźnie użyte we wszystkich tych sytuacjach. (Istnieje różnica między obiektem nieposiadającym właściwości a posiadaniem właściwości z wartościąundefined
; istnieje różnica między wywołaniem funkcji z wartościąundefined
argumentu, a całkowitym pominięciem tego argumentu).null
jest nieco bardziej szczegółowy niżundefined
: Jest to odwołanie do pustego obiektu. JavaScript jest oczywiście luźno wpisany, ale nie wszystkie rzeczy, z którymi JavaScript wchodzi w interakcje, są luźno wpisane. Jeśli interfejs API, taki jak DOM w przeglądarkach, wymaga odwołania do obiektu, które jest puste, używamy gonull
nieundefined
. PodobniegetElementById
operacja DOM zwraca odwołanie do obiektu - albo poprawne (jeśli znalazło element DOM), albonull
(jeśli nie znalazło ).Co ciekawe (lub nie), są to ich własne typy. Oznacza to, że
null
jest jedyną wartością typu Null iundefined
jedyną wartością typu Undefined.Jedyna różnica między nimi polega na tym
==
, że spowoduje przymus typu, aby spróbować dopasować wartości, i===
nie będzie. Tak na przykład"1" == 1
jest to prawda, ponieważ"1"
wymusza1
. Ale"1" === 1
to fałsz , ponieważ typy nie pasują. ("1" !== 1
jest prawdą). Pierwszym (prawdziwym) krokiem===
jest „Czy typy operandów są takie same?” a jeśli odpowiedź brzmi „nie”, wynikiem jestfalse
. Jeśli typy są takie same, robi dokładnie to, co==
robi.Koercja typów wykorzystuje dość złożone reguły i może mieć zaskakujące wyniki (na przykład
"" == 0
jest to prawda).Więcej w specyfikacji:
==
zwane również „luźną” równością)===
)źródło
if (a) { ... }
oznaczałoby „jeślia
jest prawdą”, gdzie „prawda” to niezerowa, niezerowa, nieokreślona, nie-fałszywa, niepusty łańcuch znaków. :-)null
to nie jest obiekt , to odwołanie do obiektu oznaczające „brak obiektu”. Jest to ważne, ponieważ jest to używane z interfejsami udostępnianymi przez hosta, gdy dostarczają referencje do obiektów, ale nie mają jednego do podania (np.node.nextSibling
Kiedynode
jest ostatnim elementem w jego rodzicu lubgetElementById
kiedy nie ma elementu o tym identyfikatorze). Technologia wykorzystywana w tym celu przez hosta może nie być tak elastyczna, jak JavaScript dotyczy typów zmiennych / właściwości, więc konieczne było posiadanie obiektunull
obj ref (w przeciwieństwie doundefined
).typeof null
zwracanie „obiektu” ma sens. Jedyną inną wartością, która miałaby sens, byłoby „zero”, ponieważ zdecydowanie powinno zwrócić coś innegotypeof undefined
. null reprezentuje odwołanie do null obiektu, co najmniej oznacza, że zmienna, która je przechowuje, jest przeznaczona dla pewnego rodzaju „obiektu”. Jeśli to był błąd, był to dobry błąd. W każdym razie, jeśli chodzi o odpowiedź, wskazówka na tematundefined
! ==undefined
podczas wykonywania skryptów między oknami jest dobrze znana, szczególnie do celów debugowania.Różnica jest subtelna.
W JavaScript
undefined
zmienna jest zmienną, która nigdy nie została zadeklarowana ani nigdy nie przypisała wartości. Załóżmy, żevar a;
na przykład deklarujesz , bo tak sięa
stanieundefined
, ponieważ nigdy nie przypisano żadnej wartości.Ale jeśli wtedy przydzielisz,
a = null;
toa
teraz będzienull
. W JavaScriptnull
jest obiekt (spróbujtypeof null
w konsoli JavaScript, jeśli mi nie wierzysz), co oznacza, że null jest wartością (w rzeczywistości nawetundefined
jest wartością).Przykład:
Może to okazać się przydatne w argumentach funkcji. Możesz chcieć mieć wartość domyślną, ale uważaj null za dopuszczalny. W takim przypadku możesz:
Jeśli pominiesz
optional
parametr,doSomething(1, 2) then
opcjonalny będzie"three"
ciąg, ale jeśli przejdziesz,doSomething(1, 2, null)
opcjonalny będzienull
.Jeśli chodzi o równe
==
i ściśle równe===
komparatory, pierwszy jest słabo typowy, podczas gdy ściśle równy sprawdza również typ wartości. Oznacza to, że0 == "0"
zwróci się prawda; while0 === "0"
zwróci false, ponieważ liczba nie jest łańcuchem.Użytkownik może korzystać z tych operatorów, by sprawdzić między . Na przykład:
undefined
null
Ostatni przypadek jest interesujący, ponieważ pozwala sprawdzić, czy zmienna jest niezdefiniowana lub pusta i nic więcej:
źródło
Specyfikacja jest miejscem, w którym można uzyskać pełne odpowiedzi na te pytania. Oto podsumowanie:
x
możesz:null
przez bezpośrednie porównanie za pomocą===
. Przykład:x === null
undefined
jedna z dwóch podstawowych metod: bezpośrednie porównanie zundefined
lubtypeof
. Z różnych powodów wolętypeof x === "undefined"
.null
iundefined
za pomocą==
i opierając się na nieco bardziej zaawansowanej zasad rodzaj przymusu, że średnix == null
robi dokładnie to, co chcesz.==
i===
polega na tym, że jeśli operandy są różnych typów,===
zawsze powróci,false
podczas gdy==
jeden lub oba operandy zostaną przekształcone w ten sam typ przy użyciu reguł, które prowadzą do nieco nieintuicyjnych zachowań. Jeśli operandy są tego samego typu (np. Oba są łańcuchami, jak wtypeof
powyższym porównaniu)==
i===
będą zachowywać się dokładnie tak samo.Więcej lektur:
źródło
po prostu sprawdź, czy zmienna ma poprawną wartość taką jak ta:
zwróci true, jeśli zmienna nie zawiera:
źródło
nieokreślony
Oznacza to, że zmienna nie jest jeszcze zainicjalizowana.
Przykład:
równa się (==)
Sprawdza tylko, czy wartość jest równa, a nie typ danych.
Przykład:
Ponieważ sprawdza tylko wartość.
Ścisłe równe (===)
Sprawdza, czy wartość i typ danych powinny być takie same.
Przykład:
Ponieważ sprawdza, czy typ danych x jest typem pierwotnym, ay jest obiektem typu boolean.
źródło
Reklama 1.
null
nie jest identyfikatorem właściwości obiektu globalnego, jakundefined
może byćPokaż fragment kodu
Ad 2.
===
Wartości i typy kontrolne.==
Dont wymagać tego samego rodzaju i wykonane niejawna konwersja przed porównania (za pomocą.valueOf()
a.toString()
). Tutaj masz wszystko ( src ):gdyby
== (jego negacja ! = )
=== (jego negacja ! == )
źródło
document.all == null
idocument.all !== null
Jeśli twoja (logiczna) kontrola dotyczy negacji (!) I chcesz przechwycić zarówno JS, jak
null
iundefined
(ponieważ różne przeglądarki dadzą różne wyniki), skorzystasz z mniej restrykcyjnego porównania: np .:To uchwyci zarówno
null
iundefined
źródło
Spróbuj z inną logiką . Możesz użyć poniższego kodu do sprawdzenia wszystkich czterech (4) warunków sprawdzania poprawności, takich jak: nie jest pusty, nie jest pusty, nie jest niezdefiniowany i nie zero używa tylko tego kodu (! (! (Zmienna))) w javascript i jquery.
}
źródło