Jak ustalić, czy zmienna jest undefined
lub null
?
Mój kod jest następujący:
var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
// DO SOMETHING
};
<div id="esd-names">
<div id="name"></div>
</div>
Ale jeśli to zrobię, interpreter JavaScript przestanie działać.
Odpowiedzi:
Możesz użyć właściwości abstrakcyjnego operatora równości, aby to zrobić:
Ponieważ
null == undefined
to prawda, powyższy kod przechwytuje zarównonull
iundefined
.źródło
const y = undefined; y == null;
Powinien powrócićtrue
y
stały, ale porównujeszabc
(niey
). Kiedy testowałemy
przezconsole.log(y == null);
Chrome i Firefox, otrzymałemtrue
wynik. Jeśli wystąpił błąd, być może próbowałeś użyć operatora przypisania=
zamiast porównania,==
co miałoby sens zwracać błąd, ponieważconst
nie można go ponownie przypisać.null
lubundefined
przejść, jeśli zmienna jest równa0
? Pytanie nie dotyczy testowania pod kątem prawdziwej wartości, ale testowanie wprost pod kątemnull
lubundefined
.Standardowy sposób łapania
null
iundefined
jednocześnie jest następujący:- który jest w 100% równoważny z bardziej wyraźnym, ale mniej zwięzłym:
Pisząc profesjonalną JS, przyjmuje się za pewnik, że równość typów
==
===
jest zrozumiała, a zachowanie vs jest zrozumiałe. Dlatego używamy==
i tylko porównujemynull
.Edytuj ponownie
Komentarze sugerujące użycie
typeof
są po prostu błędne. Tak, moje powyższe rozwiązanie spowoduje błąd ReferenceError, jeśli zmienna nie istnieje. To coś dobrego. Błąd ReferenceError jest pożądany: pomoże ci znaleźć błędy i naprawić je przed wysłaniem kodu, podobnie jak błędy kompilatora w innych językach. Użyjtry
/,catch
jeśli pracujesz z danymi wejściowymi, nad którymi nie masz kontroli.Nie powinieneś mieć żadnych odniesień do niezadeklarowanych zmiennych w swoim kodzie.
źródło
!==
zamiast!=
.undefined
, jak każda deklarowana, ale niezainicjowana zmienna, tzn.var someVar;
Więc twój argument tak naprawdę nie wytrzymaŁącząc powyższe odpowiedzi, wydaje się, że najbardziej kompletną odpowiedzią byłoby:
Powinno to działać dla każdej zmiennej, która jest niezadeklarowana lub zadeklarowana i jawnie ustawiona na null lub niezdefiniowana. Wyrażenie logiczne powinno mieć wartość false dla każdej deklarowanej zmiennej, która ma rzeczywistą wartość inną niż null.
źródło
typeof
to operator, a nie funkcja, więc nie potrzebuje nawiasów, ale mimo to doceniam nawiasy - po prostu dla czytelności.variable == null
źródło
undefined
ocenia równenull
./*jshint eqnull:true */
na górze dokumentu lub funkcji JS, a JSHint przestanie ostrzegać o twoich zastosowaniach== null
.==
jest zepsute. Przymusif(variable == null)
w tej odpowiedzi ma dla mnie pełny sens ...oceni prawdę, jeśli wartość nie jest:
zero
nieokreślony
NaN
pusta struna ("")
0
fałszywe
źródło
if (EmpName)
. Jeśli to jużundefined
będzie fałsz.var EmpName; if (EmpName)
. Gdzie zmienna jest zdefiniowana, ale nie ma przypisanej wartości.attr()
Funkcja jQuery zwraca pusty ciąg znaków lub rzeczywistą wartość (i nigdynull
lubundefined
). Powraca tylko wtedy,undefined
gdy selektor nie zwrócił żadnego elementu.Możesz więc przetestować pusty ciąg. Alternatywnie, ponieważ puste ciągi, puste i niezdefiniowane są fałszywe-y, możesz po prostu to zrobić:
źródło
ReferenceError: EmpName is not defined
undefined
jeśli atrybut nie istnieje na elemencie (nie tylko, jeśli selektor nie ma pasujących elementów, zgodnie z odpowiedzią). Na przykład „img
bez”src
wróciłobyundefined
do$('img').attr('src');
Przyszedłem do tego napisać własną funkcję. JavaScript jest dziwny.
Można go używać dosłownie na wszystkim. (Zauważ, że sprawdza to również, czy zmienna zawiera jakieś użyteczne wartości . Ale ponieważ ta informacja jest zwykle potrzebna, myślę, że warto ją opublikować). Proszę rozważyć pozostawienie notatki.
Kompatybilny z TypeScript.
Ta funkcja powinna robić dokładnie to samo, co
empty()
funkcja PHP (patrzRETURN VALUES
)Uważa
undefined
,null
,false
,0
,0.0
,"0"
{}
,[]
jako pusty."0.0"
,NaN
," "
,true
Są uważane za niepusty.źródło
{ }
. To powszechny i głupi problem językowy, ale o tym zapomniałem. Wszystkie moje wyszukiwania pokazują odpowiedzi na niezdefiniowane wartości zerowe lub luźne porównania równości (==), ale nie ścisłe równości (===) lub równoważne. A potem tutaj, w odpowiedzi na -1 pozycji na samym dole strony (zanim przegłosowałem), znalazłem odpowiedź, która mi umknęła.Object.keys( obj ).length < 1
a może === 0, zakładając, że nigdy nie będzie -1. W każdym razie, podniesiony do zera, woo. : p==
aby===
tutaj, to byłoby to rozsądne działanie.Jeśli zmienna, którą chcesz sprawdzić, jest globalna, zrób
Ten sposób sprawdzania nie spowoduje zgłoszenia błędu, nawet jeśli
yourVarName
zmienna nie istnieje.Przykład: Chcę wiedzieć, czy moja przeglądarka obsługuje History API
Jak to działa:
window
jest obiektem, który przechowuje wszystkie zmienne globalne jako swoje właściwości, aw JavaScript można próbować uzyskać dostęp do nieistniejącej właściwości obiektu. Jeślihistory
nie istnieje, towindow.history
zwracaundefined
.undefined
jest falsey, więc kod wif(undefined){}
bloku nie będzie działał.źródło
null
lubundefined
będzie działać jeśli twój JavaScript jest uruchomiony poza przeglądarką (czyli w node.js), ani. Będzie również traktować globalne ustawienie0
,false
lub''
takie same jak te, które są niezgłoszonych lubundefined
lubnull
, co jest zwykle w porządku.Najkrótszy i najłatwiejszy:
to oceni prawdę, jeśli EmpName to:
źródło
Prawdopodobnie najkrótszym sposobem na to jest:
Oto dowód:
Pokaż fragment kodu
A oto więcej szczegółów na temat
==
(źródło tutaj )BONUS : dlaczego
===
jest bardziej jasne niż==
(spójrz na odpowiedź agc )źródło
Właśnie miałem ten problem, tj. Sprawdzanie, czy obiekt jest pusty.
Po prostu używam tego:
Na przykład:
źródło
Ponieważ używasz jQuery , możesz określić, czy zmienna jest niezdefiniowana, czy jej wartość jest pusta, używając pojedynczej funkcji.
źródło
ReferenceError: s is not defined
na pierwszy przykład.Element sprawdzający jQuery nie jest pusty:
źródło
W JavaScript, zgodnie z moją wiedzą, możemy sprawdzić niezdefiniowaną, zerową lub pustą zmienną, jak poniżej.
Sprawdź wszystkie warunki:
źródło
var
to słowo zastrzeżone, to rzuciSyntaxError
Możesz po prostu użyć następujących (wiem, że istnieją krótsze sposoby, aby to zrobić, ale może to ułatwić wizualną obserwację, przynajmniej dla innych osób oglądających kod).
źródło
Najłatwiejszym sposobem sprawdzenia jest:
źródło
false
, co jest potencjalnie niepożądane.undefined
,null
i kilka innych rzeczy, takich jak pusty ciąg, +0, -0NaN
ifalse
przejść.!
operator wymusza operandvariable
- tutaj - do Boolean: ecma-international.org/ecma-262/#sec-tobooleanZ rozwiązaniem poniżej:
Jestem w stanie sprawdzić, czy:
źródło
Aby sprawdzić, czy zmienna jest pusta lub niezdefiniowana, używam poniższego kodu.
źródło
typeof
i porównać doundefined
prostych, a nie jako ciąg. Działa to, ale dodatkowy operator nie ma żadnego efektu, ale czyni go bardziej wyrazistym.Test ten uruchamiam w konsoli Chrome. Używając (void 0) możesz sprawdzić niezdefiniowane:
źródło
Spójrzmy na to
Powyżej zmienna jest zadeklarowana tylko jako
apple
. W takim przypadku, jeśli wywołamy metodęalert
, wyświetli się niezdefiniowana.W drugim wyświetla null, ponieważ zmienna
apple
wartości ma wartość null.Możesz więc sprawdzić, czy wartość jest niezdefiniowana, czy pusta.
źródło
Najlepszym sposobem:
źródło
Ponieważ === sprawdza zarówno typ, jak i wartość. Oba typy są różne, ale wartość jest taka sama.
źródło
źródło
typeof
nigdy nie daundefined
, tylko ciąg'undefined'
. Co więcej,i == null
jest już prawdą, jeśli taki
jestundefined
, więc drugi boolean byłby zbędny, nawet gdyby zadziałał.foo == null
Sprawdzenie powinno załatwić sprawę i rozwiązać „niezdefiniowany lub null” przypadek w jak najkrótszym czasie. (Nie biorąc pod uwagę przypadku „foo nie jest zadeklarowany”). Ale ludzie, którzy są przyzwyczajeni do 3 równych (co jest najlepszą praktyką), mogą tego nie zaakceptować. Wystarczy spojrzeć na zasady eqeqeq lub triple-equals w eslint i tslint ...W tym przypadku należy zastosować jawne podejście, gdy sprawdzamy, czy zmienna jest,
undefined
czynull
osobno, a moim wkładem w ten temat (na razie 27 odpowiedzi nie-negatywnych!) Jest użycievoid 0
zarówno krótkiego, jak i bezpiecznego sposobu przeprowadzania kontroli dlaundefined
.Używanie
foo === undefined
nie jest bezpieczne, ponieważ niezdefiniowane nie jest słowem zarezerwowanym i może być śledzone ( MDN ). Korzystanie ztypeof === 'undefined'
czeku jest bezpieczne, ale jeśli nie będziemy się przejmować przypadkiem foo-is-undeklarowanym, można zastosować następujące podejście:źródło
jeśli utworzysz funkcję, aby to sprawdzić:
źródło
Wywołanie typeof null zwraca wartość „object”, ponieważ wartość specjalna null jest uważana za odwołanie do pustego obiektu. Safari w wersji 5 i Chrome w wersji 7 mają dziwactwo, w którym wywołanie typeof wyrażenia regularnego zwraca „funkcję”, podczas gdy wszystkie inne przeglądarki zwracają „obiekt”.
źródło
Możesz użyć tylko drugiego: ponieważ sprawdzi zarówno definicję, jak i deklarację
źródło
Nadal uważam, że najlepszym / bezpiecznym sposobem przetestowania tych dwóch warunków jest przelanie wartości na ciąg:
źródło
Możesz sprawdzić, czy wartość jest niezdefiniowana lub zerowa, po prostu używając typeof:
źródło
null
. Nie rozumiem, dlaczego udzielane są nowe, niepoprawne odpowiedzi na pytanie, na które wiele lat temu udzielono poprawnej i kompletnej odpowiedzi. Czy uważasz, że obecne odpowiedzi są w jakiś sposób niewystarczające?if(x==null)
jest złym pomysłem w JavaScript. Oceniaj za pomocą"=="
- może to spowodować nieoczekiwany przymus typu i nie może być odczytany przez CoffeeScript, nigdy nie używaj „==” lub „! =” W ocenie stanu!if(x)
będzie lepiej, ale uważaj na 0 i „” . Będzie ona traktowana jako fałszywą , a nie z równym metody"!= null"
jest prawdą .Zobacz najlepsze praktyki JavaScript .
źródło
==
porównać donull
jest standardowy sposób łapania oraz w JS. Przymus typu z nie stanowi ryzyka w tym konkretnym kontekście i jest w rzeczywistości wykorzystywany do osiągnięcia celu złapania zarówno i jednocześnie. Poświęć więcej czasu na pracę z tym językiem, zanim zdecydujesz się zaoferować nieprawidłowe i mylące odpowiedzi na pytania, które zostały zadowalająco rozwiązane lata temu.null
undefined
==
null
undefined