Kiedy w JavaScript jest używany null lub undefined? [duplikat]

To pytanie ma już odpowiedź tutaj:

Jestem naprawdę zdezorientowany, kiedy JavaScript zwraca null LUB undefined. Również różne przeglądarki wydają się zwracać je inaczej.

Czy mógłbyś podać kilka przykładów null/undefined z przeglądarkami to ich zwróci.

Chociaż jestem teraz jasny w aspekcie undefined, nadal nie jestem w 100% jasny w null. Czy jest podobny do pustej wartości?

Np. masz pole tekstowe, które nie ma ustawionej wartości. Teraz, kiedy próbujesz uzyskać dostęp do jego wartości, czy będzie to null LUB undefined i czy są one podobne?

Author: Xufox, 2011-06-21

6 answers

Metody DOM getElementById(), nextSibling(), childNodes[n], parentNode() i tak dalej return null (zdefiniowany, ale bez wartości), gdy wywołanie nie zwraca obiektu węzła.

Właściwość jest zdefiniowana, ale obiekt, do którego się odnosi, nie istnieje.

Jest to jeden z niewielu przypadków, w których możesz Nie chcieć sprawdzić równość-

if(x!==undefined) będzie true dla wartości null

Ale if(x!= undefined) będzie prawdziwe (tylko) dla wartości, które nie są ani undefined, ani null.

 79
Author: kennebec,
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
2016-01-27 10:38:18

Uważam, że niektóre z tych Odpowiedzi są niejasne i skomplikowane, uważam, że najlepszym sposobem, aby dowiedzieć się tych rzeczy na pewno jest po prostu otworzyć konsolę i przetestować ją samodzielnie.

var x;

x == null            // true
x == undefined       // true
x === null           // false
x === undefined      // true

var y = null;

y == null            // true
y == undefined       // true
y === null           // true
y === undefined      // false

typeof x             // 'undefined'
typeof y             // 'object'

var z = {abc: null};

z.abc == null        // true
z.abc == undefined   // true
z.abc === null       // true
z.abc === undefined  // false

z.xyz == null        // true
z.xyz == undefined   // true
z.xyz === null       // false
z.xyz === undefined  // true

null = 1;            // throws error: invalid left hand assignment
undefined = 1;       // works fine: this can cause some problems

Jest to zdecydowanie jeden z bardziej subtelnych niuansów JavaScript. Jak widzisz, możesz nadpisać wartość undefined, czyniąc ją nieco zawodną w porównaniu do null. Używając operatora ==, możesz niezawodnie używać null i undefined zamiennie, o ile mogę powiedzieć. Jednak ze względu na zaletą tego, że null nie można przedefiniować, mógłbym użyć go przy użyciu ==.

Na przykład, variable != null zawsze zwróci false, jeśli variable jest równe null lub undefined, podczas gdy variable != undefined zwróci false, jeśli variable jest równe null lub undefined, chyba że undefined zostanie wcześniej przypisane.

Możesz niezawodnie użyć operatora === do rozróżnienia pomiędzy undefined i null, jeśli chcesz się upewnić, że wartość jest rzeczywiście undefined (zamiast null).

Według ECMAScript 5 spec:

  • obie Null oraz Undefined są dwa z sześciu wbudowanych typów.

4.3.9 wartość niezdefiniowana

Prymitywna wartość używana, gdy zmiennej nie przypisano wartości

4.3.11 wartość null

Prymitywna wartość, która reprezentuje celowy brak jakiejkolwiek wartości obiektu

 119
Author: Cory Gross,
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
2013-08-28 04:27:09

Otrzymujesz undefined dla różnych scenariuszy:

Deklarujesz zmienną za pomocą var, ale nigdy jej nie ustawiasz.

var foo; 
alert(foo); //undefined.

Próbujesz uzyskać dostęp do Właściwości obiektu, którego nigdy nie ustawiłeś.

var foo = {};
alert(foo.bar); //undefined

Próbujesz uzyskać dostęp do argumentu, który nigdy nie został dostarczony.

function myFunction (foo) {
  alert(foo); //undefined.
}

Jak zauważył cwolves w komentarzu do innej odpowiedzi, funkcje, które nie zwracają wartości.

function myFunction () {
}
alert(myFunction());//undefined

Null zwykle musi być celowo ustawione na zmiennej lub właściwości (zobacz komentarze Dla Przypadku w które może się pojawić bez ustawienia). Ponadto null jest typu object, a undefined jest typu undefined.

Powinienem również zauważyć, że null jest ważne w JSON, ale undefined nie jest:

JSON.parse(undefined); //syntax error
JSON.parse(null); //null
 50
Author: Bjorn Tipling,
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
2011-06-21 17:28:35

może mi czegoś brakuje, ale afaik, dostajesz undefined tylko

Update: Ok, sporo przegapiłem, próbując uzupełnić:

Dostajesz undefined...

... podczas próby uzyskania dostępu do Właściwości obiektu, który nie istnieje:

var a = {}
a.foo // undefined

... jeśli zadeklarowałeś zmienną, ale jej nie zainicjalizowałeś:

var a;
// a is undefined

... kiedy uzyskujesz dostęp do parametru, dla którego nie podano żadnej wartości:

function foo (a, b) {
    // something
}

foo(42); // b inside foo is undefined

... gdy funkcja nie zwraca wartość:

function foo() {};
var a = foo(); // a is undefined

Może być tak, że niektóre wbudowane funkcje zwracają null po jakimś błędzie, ale jeśli tak, to jest to udokumentowane. {[6] } jest konkretną wartością w JavaScript, undefined nie jest.


Normalnie nie trzeba ich rozróżniać. W zależności od możliwych wartości zmiennej, wystarczy użyć if(variable), aby sprawdzić, czy wartość jest ustawiona, czy nie (oba, null i undefined oceniają na false).

Również różne przeglądarki wydają się zwracać te inaczej.

Proszę podać konkretny przykład.

 9
Author: Felix Kling,
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
2011-06-21 17:31:42

Jeśli chodzi o ten temat Specyfikacja (ecma-262) jest dość jasna

Uważam, że to naprawdę przydatne i proste, tak, że dzielę się nim: - Tutaj znajdziesz algorytm równości - Tutaj znajdziesz ścisły algorytm równości

Wpadłem na niego czytając "abstrakcyjna równość, ścisła równość i ta sama wartość" ze strony programisty Mozilli, sekcja sameness.

Mam nadzieję, że się przyda.

 3
Author: DiegoS,
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
2013-12-03 13:40:25

Właściwość, gdy nie ma definicji, jest niezdefiniowana. null jest obiektem. Typ jest zerowy. undefined nie jest obiektem, jego typ jest niezdefiniowany.

Jest to dobry artykuł wyjaśniający różnicę, a także podając kilka przykładów.

Null vs undefined

 0
Author: Alex,
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
2016-01-27 10:44:35