W JavaScript istnieją dwie wartości, które zasadniczo mówią „nie istnieje” - undefined
i null
.
Właściwość, do której programista niczego nie przypisał, będzie undefined
, ale aby właściwość stała się null
, null
musi być do niej jawnie przypisana.
Kiedyś myślałem, że jest potrzeba, null
ponieważ undefined
jest to prymitywna wartość i null
przedmiot. Tak nie jest, nawet jeśli typeof null
da 'object'
: W rzeczywistości obie są wartościami pierwotnymi - co oznacza, że undefined
ani ani nie null
mogą 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ż false
w kontekstach logicznych. Jedyną prawdziwą różnicą, o której przychodzi mi do głowy NaN
, jest to, że jedna ocenia się , a druga 0
w kontekstach numerycznych.
Dlaczego więc jest jedno undefined
i drugie i null
jeś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, null
którego nie można wyrazić za pomocą undefined
zamiast tego.
Tak więc ogólny konsensus wydaje się być taki, że undefined
oznacza to „nie ma takiej własności”, podczas gdy null
oznacza „właściwość istnieje, ale nie ma wartości”.
Mógłbym z tym żyć, gdyby implementacje JavaScript faktycznie wymuszały takie zachowanie - ale undefined
jest 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ć in
operatora lub hasOwnProperty()
mimo wszystko. A więc jeszcze raz: jakie jest praktyczne zastosowanie oddzielnych wartości dla undefined
i null
?
Właściwie używam, undefined
gdy chcę anulować wartości właściwości, które nie są już używane, ale których nie chcę delete
. Powinienem użyć null
zamiast tego?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.
Nie, tylko to undefined
mówi.
undefined
.