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:

  1. Jak sprawdzić zmienną, czy jest to null LUB undefined i jaka jest różnica między null i undefined?

  2. Jaka jest różnica między "= = " A "= = = " (trudno wyszukać w Google ===)?

Author: Arslan Ali, 2011-02-24

6 answers

Jak sprawdzić zmienną, czy jest to null lub undefined...

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 i undefined?

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).

Co ciekawe (lub nie), to ich własne typy. Co oznacza, że 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:

 815
Author: T.J. Crowder,
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) thenopcjonalnym 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
 84
Author: Julien Portalier,
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:

  1. 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 z undefined lub typeof. Dla z różnych powodów, wolę typeof x === "undefined".
    • sprawdź czy jest to jeden z null i undefined używając == i opierając się na nieco tajemnicze reguły przymusu typu, które oznaczają, że x == null robi dokładnie to, co chcesz.

  2. podstawowa różnica pomiędzy == i === polega na tym, że jeśli operandy są różnych typów, === zawsze zwróci false, 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ównaniu typeof powyżej), == i === będzie zachowywać się dokładnie tak samo.

Więcej czytań:

 14
Author: Tim Down,
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 .

 7
Author: kannanrbk,
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
 0
Author: Sumit Joshi,
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

 0
Author: DaniDev,
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