Chciałem sprawdzić, czy zmienna jest zdefiniowana, czy nie. Na przykład następujące zgłasza niezdefiniowany błąd
alert( x );
Jak mogę złapać ten błąd?
javascript
variables
undefined
Jineesh
źródło
źródło
Odpowiedzi:
W JavaScript
null
jest obiektem. Jest jeszcze jedna wartość rzeczy, które nie istnieją,undefined
. DOM zwracanull
prawie wszystkie przypadki, w których nie znajduje struktury w dokumencie, ale sama JavaScriptundefined
jest użytą wartością.Po drugie, nie, nie ma bezpośredniego odpowiednika. Jeśli naprawdę chcesz to sprawdzić
null
, wykonaj:Jeśli chcesz sprawdzić, czy zmienna istnieje, można to zrobić tylko za pomocą
try
/catch
, ponieważtypeof
potraktuje ona niezadeklarowaną zmienną i zmienną zadeklarowaną o wartościundefined
równoważnej.Ale, aby sprawdzić, czy zmienna jest zadeklarowana i nie jest
undefined
:Wcześniej konieczne było użycie
typeof
operatora do bezpiecznego sprawdzenia niezdefiniowanego, ponieważ możliwe było ponowne przypisanieundefined
jak zmienna. Stary sposób wyglądał następująco:Kwestia możliwości
undefined
ponownego przypisania została naprawiona w ECMAScript 5, który został wydany w 2009 roku. Teraz możesz bezpiecznie używać===
i!==
testowaćundefined
bez użycia,typeof
ponieważundefined
jest on tylko do odczytu.Jeśli chcesz wiedzieć, czy członek istnieje niezależnie, ale nie obchodzi go jego wartość:
Jeśli chcesz wiedzieć, czy zmienna jest prawdziwa :
Źródło
źródło
typeof
operator (typeof null == 'object'
).null
Wartość to wartość prymitywny , który jest jedyną wartością typu Null .Jedynym sposobem, aby naprawdę sprawdzić, czy zmienna jest,
undefined
jest wykonanie następujących czynności. Pamiętaj, niezdefiniowany jest obiekt w JavaScript.Niektóre inne rozwiązania w tym wątku prowadzą do przekonania, że zmienna jest niezdefiniowana, nawet jeśli została zdefiniowana (na przykład o wartości NULL lub 0).
źródło
ReferenceError
.undefined
to obiekt w javascript to dezinformacja. Czy to stwierdzenie odnosi się do twojej odpowiedzi? Jest to wartośćundefined
typuundefined
przypisana do globalnego identyfikatora o nazwieundefined
.undefined
został odczytany tylko od ES5. Można bezpiecznie testować niezdefiniowany użyciemif (x === undefined) {...}
lub przy użyciu skrótów takiego:if (x === void 0)
.Technicznie właściwym rozwiązaniem jest (wierzę):
Czasami możesz się lenić i używać
ale pozwala to zarówno niezdefiniowanej zmiennej x, jak i zmiennej x zawierającej null, zwrócić wartość true.
źródło
var x;
atypeof x;
otrzymasz"undefined"
tak, jakbyś to zrobiłtypeof lakjdflkdsjflsj;
Jeszcze łatwiejszą i bardziej skróconą wersją byłoby:
LUB
źródło
Często robiłem:
źródło
Możesz także użyć trójskładnikowego operatora warunkowego:
źródło
var a = false;
? Powinieneś to sprawdzić, jeślia===undefined
zamiast tegovar x;
powyższe spowoduje wygenerowanie błędu!a
przetestować TRUEundefined
, to również prawdziwe dla testuje0
inull
ifalse
. Jest to bardzo niepoprawne i powinno zostać usunięte.Często używam najprostszego sposobu:
EDYTOWAĆ:
Bez zainicjowania zmiennej zostanie zgłoszony wyjątek „Uncaught ReferenceError: zmienna nie jest zdefiniowana ...”
źródło
Uncaught ReferenceError: variable is not defined
variable
jest zdefiniowany przezvar variable;
. Ten fragment zastąpivariable
zakres lokalny. Może złamać logikę, która oczekuje dostępu do zamknięcia lub zmiennej globalnej. Tovar variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
Innym potencjalnym „rozwiązaniem” jest użycie
window
obiektu. Pozwala to uniknąć problemu z błędem odniesienia w przeglądarce.źródło
undefined
. To nie zrobi tego.Błąd mówi ci, że
x
nawet nie istnieje! Nie został zadeklarowany , co różni się od przypisania wartości.Jeśli zadeklarujesz
x
, nie otrzymasz błędu. Zostanie wyświetlony alert z informacją,undefined
ponieważx
istnieje / został zadeklarowany, ale nie przypisano mu żadnej wartości.Aby sprawdzić, czy zmienna została zadeklarowana, możesz użyć
typeof
dowolnej innej metody sprawdzenia, czy zmienna istnieje, spowoduje zgłoszenie tego samego błędu, który wystąpił na początku.Sprawdza to typ wartości przechowywanej w
x
. Powróci tylkoundefined
gdyx
nie została uznana, czy też nie zostały zgłoszone i nie został jeszcze przydzielony.źródło
typeof
operatora.Te
void
powroty operatoraundefined
dla każdej argumentu / ekspresji przekazywane do niego. abyś mógł przetestować wynik (w rzeczywistości niektóre minizery zmieniają kod zundefined
navoid 0
aby zapisać kilka znaków)Na przykład:
źródło
typeof
a myślenieundefined
można przypisać ponownie, co nie było możliwe od około dekady.undefined
, bo Bóg tylko wie, z jakiego powodu, używanievoid 0
zawsze powróciundefined
niezależnie.Możemy to sprawdzić
undefined
w następujący sposóbźródło
Po prostu zrób coś takiego:
i nazwij to tak:
źródło
Przyjęta odpowiedź jest poprawna. Chciałem tylko dodać jeszcze jedną opcję. Możesz również użyć
try ... catch
bloku, aby poradzić sobie z tą sytuacją. Dziwny przykład:Uważaj na
catch
blok, który jest nieco niechlujny, ponieważ tworzy zakres na poziomie bloku. I oczywiście przykład jest bardzo uproszczony, aby odpowiedzieć na zadane pytanie, nie obejmuje najlepszych praktyk w zakresie obsługi błędów;).źródło
Używam małej funkcji do sprawdzenia, czy zmienna została zadeklarowana, co naprawdę zmniejsza ilość bałaganu w moich plikach javascript. Dodaję sprawdzenie wartości, aby upewnić się, że zmienna nie tylko istnieje, ale także została przypisana wartość. Drugi warunek sprawdza, czy zmienna również została utworzona, ponieważ jeśli zmienna została zdefiniowana, ale nie utworzona (patrz przykład poniżej), nadal będzie generować błąd, jeśli spróbujesz odwołać się do jej wartości w kodzie.
Nie utworzony -
var my_variable;
Utworzony -var my_variable = "";
Następnie możesz użyć instrukcji warunkowej, aby sprawdzić, czy zmienna została zdefiniowana ORAZ utworzona instancja w ten sposób ...
lub w celu przetestowania, czy nie zostało zdefiniowane i utworzone wystąpienie ...
źródło
return typeof el !== "undefined" && typeof el.val() !== "undefined"