Sprawdzanie JavaScript pod kątem null vs. undefined i różnicy między = =i == =
Wiem, Wiem, że muszą być jakieś wątki na ten temat. Ale skorzystałem z wyszukiwania i nie dostałem odpowiedzi, która pasuje do moich potrzeb. No to zaczynamy:
Jak sprawdzić zmienną, czy jest to
null
LUBundefined
i jaka jest różnica międzynull
iundefined
?Jaka jest różnica między "= = " A "= = = " (trudno wyszukać w Google
===
)?
6 answers
Jak sprawdzić zmienną, czy jest to
null
lubundefined
...
Jest zmienną null
:
if (a === null)
// or
if (a == null) // but see note below
...ale zauważ, że ta ostatnia będzie również prawdziwa, Jeśli a
jest undefined
.
Jest to undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
...ale ponownie, zauważ, że ostatni jest niejasny; będzie również prawdą, jeśli a
jest null
.
Teraz, pomimo powyższego, zwyczajowym sposobem sprawdzenia ich jest użycie faktu, że są } false :
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
Jest to zdefiniowane przez ToBoolean W spec.
...a jaka jest różnica między
null
iundefined
?
Są obie wartości zwykle używane do wskazania braku czegoś. undefined
jest bardziej ogólnym, używanym jako domyślna wartość zmiennych, dopóki nie zostanie im przypisana inna wartość, jako wartość argumentów funkcji, które nie zostały podane podczas wywoływania funkcji, oraz jako wartość, którą otrzymujesz, gdy pytasz obiekt o właściwość, której nie ma. Ale może również być wyraźnie stosowane we wszystkich tych sytuacjach. (Istnieje różnica między obiektem nie posiadającym właściwości, a posiadającym właściwość o wartości undefined
; Istnieje różnica między wywołaniem funkcji o wartości undefined
dla argumentu, a pozostawieniem tego argumentu całkowicie.)
null
jest nieco bardziej szczegółowe niż undefined
: jest to puste odniesienie do obiektu. Oczywiście JavaScript jest luźno pisany, ale nie wszystkie rzeczy, z którymi JavaScript współdziała, są luźno pisane. Jeśli API podobnie jak DOM w przeglądarkach wymaga odwołania do obiektu, które jest puste, używamy null
, a nie undefined
. Podobnie, operacja getElementById
DOM zwraca odniesienie do obiektu - albo poprawne (jeśli znalazło element DOM), albo null
(jeśli nie).
null
jest jedyną wartością w typie Null, a undefined
jest jedyną wartością w typie niezdefiniowanym.
Jaka jest różnica między "= = " A "==="
Jedyną różnicą między nimi jest to, że ==
zrobi Typ przymusu, aby spróbować dopasować wartości, a ===
nie będzie. więc na przykład "1" == 1
jest prawdą, ponieważ "1"
zmusza do 1
. Ale "1" === 1
jest false , ponieważ typy nie pasują. ("1" !== 1
to prawda.) Pierwszy (rzeczywisty) krok ===
to " czy typy operandów są takie same?"a jeśli odpowiedź brzmi "nie", wynikiem jest false
. Jeśli typy są takie same, to robi dokładnie to, co ==
tak.
Typ przymusu używa dość złożonych reguł i może mieć zaskakujące wyniki (na przykład "" == 0
jest prawdą).
Więcej w spec:
-
abstrakcyjne porównanie równości (
==
, również nazywana" luźną " równością) -
Ścisłe Porównanie Równości (
===
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 09:45:03
Różnica jest subtelna.
W JavaScript zmienna undefined
jest zmienną, która nigdy nie została zadeklarowana lub nigdy nie została przypisana do wartości. Powiedzmy, że zadeklarujesz var a;
na przykład, wtedy a
będzie undefined
, ponieważ nigdy nie przypisano mu żadnej wartości.
Ale jeśli następnie przypisać a = null;
wtedy a
będzie teraz null
. W JavaScript null
jest obiektem (spróbuj typeof null
w konsoli JavaScript, jeśli mi Nie wierzysz), co oznacza, że null jest wartością (w rzeczywistości nawet undefined
jest wartość).
Przykład:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
To może okazać się przydatne w argumentach funkcji. Możesz chcieć mieć wartość domyślną, ale Uznaj wartość null za akceptowalną. W takim przypadku możesz zrobić:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
Jeśli pominiesz parametr optional
doSomething(1, 2) then
opcjonalnym będzie łańcuch "three"
, ale jeśli przekażesz doSomething(1, 2, null)
, opcjonalnym będzie null
.
Jeśli chodzi o komparatory równe ==
i ściśle równe ===
, Pierwszy z nich jest typu słabego, podczas gdy strictly equal sprawdza również Typ wartości. Oznacza to, że 0 == "0"
zwróci true; natomiast 0 === "0"
zwróci false, ponieważ liczba nie jest łańcuchem znaków.
Możesz użyć tych operatorów do sprawdzenia pomiędzy undefined
a null
. Na przykład:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
Ostatni przypadek jest interesujący, ponieważ pozwala sprawdzić, czy zmienna jest niezdefiniowana lub null i nic więcej:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-02 12:20:57
Spec jest miejscem, w którym można znaleźć pełne odpowiedzi na te pytania. Oto podsumowanie:
- dla zmiennej
x
można:- sprawdź, czy jest to
null
przez bezpośrednie porównanie za pomocą===
. Przykład:x === null
- sprawdź, czy jest to
undefined
za pomocą jednej z dwóch podstawowych metod: bezpośredniego porównania zundefined
lubtypeof
. Dla z różnych powodów, wolętypeof x === "undefined"
. - sprawdź czy jest to jeden z
null
iundefined
używając==
i opierając się na nieco tajemnicze reguły przymusu typu, które oznaczają, żex == null
robi dokładnie to, co chcesz.
- sprawdź, czy jest to
- podstawowa różnica pomiędzy
==
i===
polega na tym, że jeśli operandy są różnych typów,===
zawsze zwrócifalse
, podczas gdy==
przekształci jeden lub oba operandy w ten sam typ przy użyciu reguł , które prowadzą do nieco nieintuicyjnego zachowania. Jeśli operandy są tego samego typu (np. oba są ciągami, jak w porównaniutypeof
powyżej),==
i===
będzie zachowywać się dokładnie tak samo.
Więcej czytań:
- Angus Croll ' s prawda, równość i JavaScript
- Andrea Giammarchi ' s JavaScript]}
- comp.lang.javascript FAQs: JavaScript Type-Conversion
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:28
Undefined
Oznacza to, że zmienna nie jest jeszcze zaintializowana .
Przykład:
var x;
if(x){ //you can check like this
//code.
}
Równe(==)
Tylko wartość kontrolna jest równa Nie typowi danych .
Przykład:
var x = true;
var y = new Boolean(true);
x == y ; //returns true
Ponieważ sprawdza tylko wartość .
Strict Equals(===)
Sprawdza, czy wartość i typ danych powinny być takie same .
Przykład:
var x = true;
var y = new Boolean(true);
x===y; //returns false.
Ponieważ sprawdza typ danych x jest typem prymitywnym, A y jest obiektem logicznym .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 17:36:36
Jak sprawdzić zmienną, czy jest NULL lub undefined
Po prostu sprawdź, czy zmienna ma poprawną wartość, taką jak Ta:
if(variable)
Zwróci true, jeśli zmienna nie zawiera :
- null
- undefined
- 0
- false
- "" (pusty łańcuch)
- NaN
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-04 13:14:57
Jeśli twoje (logiczne) sprawdzenie jest negacją (!) i chcesz uchwycić zarówno JS null
jak i undefined
(Ponieważ różne przeglądarki dadzą ci różne wyniki) skorzystaj z mniej restrykcyjnego porównania:
np.:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
To uchwyci zarówno null
jak i undefined
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-12 21:03:47