W JavaScript istnieją dwie wartości, które zasadniczo mówią „nie istnieje” - undefinedi null.
Właściwość, do której programista niczego nie przypisał, będzie undefined, ale aby właściwość stała się null, nullmusi być do niej jawnie przypisana.
Kiedyś myślałem, że jest potrzeba, nullponieważ undefinedjest to prymitywna wartość i nullprzedmiot. Tak nie jest, nawet jeśli typeof nullda 'object': W rzeczywistości obie są wartościami pierwotnymi - co oznacza, że undefinedani ani nie nullmogą zostać zwrócone z funkcji konstruktora, ponieważ obie zostaną przekonwertowane na pusty obiekt (trzeba zgłosić błąd, aby ogłosić błąd w konstruktorach).
Oba oceniają również falsew kontekstach logicznych. Jedyną prawdziwą różnicą, o której przychodzi mi do głowy NaN, jest to, że jedna ocenia się , a druga 0w kontekstach numerycznych.
Dlaczego więc jest jedno undefinedi drugie i nulljeśli to tylko dezorientuje programistów, którzy nieprawidłowo sprawdzają null, czy właściwość została ustawiona, czy nie?
Chciałbym wiedzieć, czy ktoś ma rozsądny przykład, w którym konieczne jest użycie, nullktórego nie można wyrazić za pomocą undefinedzamiast tego.
Tak więc ogólny konsensus wydaje się być taki, że undefinedoznacza to „nie ma takiej własności”, podczas gdy nulloznacza „właściwość istnieje, ale nie ma wartości”.
Mógłbym z tym żyć, gdyby implementacje JavaScript faktycznie wymuszały takie zachowanie - ale undefinedjest to całkowicie poprawna wartość pierwotna, więc można ją łatwo przypisać do istniejących właściwości, aby złamać ten kontrakt. Dlatego jeśli chcesz się upewnić, czy właściwość istnieje, musisz użyć inoperatora lub hasOwnProperty()mimo wszystko. A więc jeszcze raz: jakie jest praktyczne zastosowanie oddzielnych wartości dla undefinedi null?
Właściwie używam, undefinedgdy chcę anulować wartości właściwości, które nie są już używane, ale których nie chcę delete. Powinienem użyć nullzamiast tego?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.Nie, tylko to undefinedmówi.
undefined.