W JavaScript mamy coś o nazwie undefined . Powiedziałem coś, ponieważ tak naprawdę nie wiem, czy jest to klasa podstawowa, wbudowana zmienna, słowo kluczowe, czy cokolwiek innego. Po prostu wiem, że tam jest.
Aby zobaczyć to w akcji, możesz po prostu napisać:
undefined;
typeof undefined;
Czy ktoś może mi wyjaśnić, dlaczego ta rzecz została wstawiona do JavaScript? Mamy null
wartość w tym języku, więc nie powinno to być coś takiego null
. W innych językach, gdy nie znamy wartości właściwości lub zmiennej, po prostu ustawiamy ją na null. Tutaj możemy zrobić to samo.
Jak możemy użyć tej rzeczy w JavaScript?
javascript
language-design
Saeed Neamati
źródło
źródło
undefined
i kiedy używaćnull
Odpowiedzi:
Są dwa rzeczy, które musisz zrozumieć o niezdefiniowanym ...
undefined
, który może mieć tylko jedną wartość .undefined
Teraz przeczytaj uważnie następujące informacje ...
Jest tak wiele wartości typu
number
(10, 10.01, 1e1). Ale może być tylko jedna wartość typuundefined
i ta wartość jest przechowywana w zmiennejundefined
. Wartość ta nie ma dosłownego reprezentacji - na przykład, wartości numeryczne1
,100
,1e-1
to wszystkie literały z numerem typu, ale wartość przechowywana w zmiennejundefined
nie ma dosłownego formularza.undefined
jest zmienną, zwykłą zmienną, którą JavaScript deklaruje i przypisuje jej wartość typuundefined
w zakresie globalnym. Możesz więc wykonać następujące czynności ...undefined
, możesz wygenerować wartość typuundefined
przez wyrażenievoid 0
- którego jedynym celem jest zwrócenie wartości typuundefined
.NIE. Tak jak nikt nie jest w stanie wyjaśnić, dlaczego niezadeklarowane zmienne mają zasięg globalny zamiast lokalnego. Musisz po prostu wytrenować się, aby mądrze z niego korzystać, zamiast próbować znaleźć uzasadnienie dla jego istnienia.
Chociaż
null
potrafi to robićundefined
, jest mniej więcej związane zeobjects
skalarami. Rzeczywiście, JavaScript uważanull
się za obiekt -typeof null
zwraca „obiekt”.Moim zdaniem, podstawową rzeczą jest, aby NIE próbować uzasadniać bezwzględnych celów
undefined
inull
- i używać ich w kodzie w sposób inteligentny, aby kod był czytelny, możliwy do utrzymania i wielokrotnego użytku.źródło
the bottom line is to NOT try to reason the absolute purposes of undefined and null
, wygląda na to, że JavaScript jest znacznie mniejszy niż język logiczny i po prostu musimy się do niego przyzwyczaić, jak eksperymentowanie z nowym światem.undefined
”. Faktycznievoid
ocenia wyrażenie, ignoruje zwracaną wartość i zwracaundefined
wartość. Co do różnic.undefined
jest używany przez silnik JS, aby powiedzieć, że ta rzecz nie ma żadnej wartości.null
jest używany przez TY, aby powiedzieć, że ta rzecz nie ma żadnej wartości. Istnieje wyraźne rozróżnienie.undefined = 100; typeof undefined;
zwraca „niezdefiniowane” dla mnie, jeśli spróbujesz przypisać do null, pojawi się błąd. Chciałem tylko wyjaśnić to przyszłym czytelnikom.Przepraszamy za odpowiedź na starsze pytanie, ale powód, dla którego potrzebujesz zarówno niezdefiniowanej, jak i zerowej jest prosty: w opartym na prototypach języku typowania kaczego absolutnie musisz rozróżnić „ten obiekt nie definiuje wartości dla X” i „ten obiekt mówi, że X jest nic / null / empty ".
Bez tej możliwości nie można przejść przez łańcuch prototypów, więc dziedziczenie nie może działać; musisz być w stanie stwierdzić, że obj.someProp jest niezdefiniowany, abyś mógł spojrzeć na obj.prototype.someProp i dalej w górę łańcucha, aż znajdziesz wartość. Jeśli obiekt obj.someProp zwrócił wartość null, nie byłoby sposobu, aby dowiedzieć się, czy tak naprawdę było to null, czy po prostu oznaczało „spójrz na mój prototyp”. Jedynym innym sposobem na to jest wstrzyknięcie trochę kulistej magii za kulisy, która przerywa twoją zdolność do poruszania się za pomocą prototypowych łańcuchów i robienia różnych innych fragmentów czarnej magii JS.
Podobnie jak w przypadku Javascript, idea niezdefiniowanego i zerowego wydaje się na początku dziwna i głupia, a potem absolutnie genialna później (potem wraca do dziwnej i głupiej, ale z rozsądnym wyjaśnieniem).
Język taki jak C # nie będzie się kompilował, jeśli uzyskasz dostęp do właściwości, która nie istnieje, a inne języki dynamiczne często zgłaszają wyjątki w czasie wykonywania po dotknięciu właściwości, która nie istnieje, co oznacza, że musisz użyć specjalnych konstrukcji, aby je przetestować. Klasy Plus oznaczają, że po utworzeniu instancji obiektu znasz już jego łańcuch dziedziczenia i wszystkie jego właściwości - w JS mogę zmodyfikować prototyp o 15 kroków w górę łańcucha, a zmiany te pojawią się na istniejących obiektach.
źródło
Istnieje zmienna globalna
undefined
, która jest ustawiona na niezdefiniowaną wartość. Zli ludzie mogą ustawić coś innego, więc prawdopodobnie najlepiej nie ufać temu.typeof undeclaredVariable == 'undefined'
. próba odczytania wartości niedokładnej zmiennej spowoduje wyrzucenieReferenceError
.)null
jest subtelnie zepsuty, ponieważtypeof null == 'object'
. Nie wiem, dlaczego mamyundefined
inull
prawdopodobnie jakiś historyczny wypadek.źródło
Cóż,
undefined
jest wartością wartownika uzyskaną przez oszacowanie czegoś, co nie jest zdefiniowane jako przeciwieństwonull
, która jest dokładnie zdefiniowaną wartością, która nic nie reprezentuje .Na przykład wartość zwracana przez funkcję, która nie definiuje wartości zwracanej, jest niezdefiniowana. Wartość właściwości niezdefiniowanej w obiekcie jest niezdefiniowana. Zwracana wartość instrukcji, która nie jest wyrażeniem, jest niezdefiniowana (chociaż nie zobaczysz tego inaczej niż w konsoli).
Prosimy pamiętać, że można utworzyć funkcję, jawnie powraca
undefined
i może jednoznacznie określić właściwość z wartościąundefined
na obiekcie, bo w końcu jest to poprawna wartość. Zrobiłbyś to, aby jawnie poinformować, że coś nie jest zdefiniowane .Można myśleć o relacji
undefined
inull
jako że pomiędzyNaN
i0
.źródło
undefined
jestvoid
?void
w JavaScript jest jednostronnym operatorem , który przyjmuje dowolny argument i zwraca wartośćundefined
.