Kiedy w JavaScript jest używany null lub undefined? [duplikat]
To pytanie ma już odpowiedź tutaj:
- Jaka jest różnica między null A undefined w JavaScript? 31 odpowiedzi
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?
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
.
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
orazUndefined
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
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
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.
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.
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.
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