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?
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?
Odpowiedzi:
W JavaScript null
jest obiektem. Jest jeszcze jedna wartość rzeczy, które nie istnieją, undefined
. DOM zwraca null
prawie wszystkie przypadki, w których nie znajduje struktury w dokumencie, ale sama JavaScript undefined
jest użytą wartością.
Po drugie, nie, nie ma bezpośredniego odpowiednika. Jeśli naprawdę chcesz to sprawdzić null
, wykonaj:
if (yourvar === null) // Does not execute if yourvar is `undefined`
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ści undefined
równoważnej.
Ale, aby sprawdzić, czy zmienna jest zadeklarowana i nie jest undefined
:
if (yourvar !== undefined) // Any scope
Wcześniej konieczne było użycie typeof
operatora do bezpiecznego sprawdzenia niezdefiniowanego, ponieważ możliwe było ponowne przypisanie undefined
jak zmienna. Stary sposób wyglądał następująco:
if (typeof yourvar !== 'undefined') // Any scope
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ść:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Jeśli chcesz wiedzieć, czy zmienna jest prawdziwa :
if (yourvar)
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.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
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).
ReferenceError
.
undefined
to obiekt w javascript to dezinformacja. Czy to stwierdzenie odnosi się do twojej odpowiedzi? Jest to wartość undefined
typu undefined
przypisana do globalnego identyfikatora o nazwie undefined
.
undefined
został odczytany tylko od ES5. Można bezpiecznie testować niezdefiniowany użyciem if (x === undefined) {...}
lub przy użyciu skrótów takiego: if (x === void 0)
.
Technicznie właściwym rozwiązaniem jest (wierzę):
typeof x === "undefined"
Czasami możesz się lenić i używać
x == null
ale pozwala to zarówno niezdefiniowanej zmiennej x, jak i zmiennej x zawierającej null, zwrócić wartość true.
var x;
a typeof x;
otrzymasz "undefined"
tak, jakbyś to zrobiłtypeof lakjdflkdsjflsj;
Jeszcze łatwiejszą i bardziej skróconą wersją byłoby:
if (!x) {
//Undefined
}
LUB
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Często robiłem:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Możesz także użyć trójskładnikowego operatora warunkowego:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? Powinieneś to sprawdzić, jeśli a===undefined
zamiast tego
var x;
powyższe spowoduje wygenerowanie błędu
!a
przetestować TRUE undefined
, to również prawdziwe dla testuje 0
i null
i false
. Jest to bardzo niepoprawne i powinno zostać usunięte.
Często używam najprostszego sposobu:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
EDYTOWAĆ:
Bez zainicjowania zmiennej zostanie zgłoszony wyjątek „Uncaught ReferenceError: zmienna nie jest zdefiniowana ...”
Uncaught ReferenceError: variable is not defined
variable
jest zdefiniowany przez var variable;
. Ten fragment zastąpi variable
zakres lokalny. Może złamać logikę, która oczekuje dostępu do zamknięcia lub zmiennej globalnej. To var 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.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
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.
var x; // declaration
x = 2; // assignment
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.
if(typeof x !== "undefined") {
alert(x);
}
Sprawdza to typ wartości przechowywanej w x
. Powróci tylko undefined
gdy x
nie została uznana, czy też nie zostały zgłoszone i nie został jeszcze przydzielony.
typeof
operatora.
Te void
powroty operatora undefined
dla każdej argumentu / ekspresji przekazywane do niego. abyś mógł przetestować wynik (w rzeczywistości niektóre minizery zmieniają kod z undefined
navoid 0
aby zapisać kilka znaków)
Na przykład:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
a myślenie undefined
można przypisać ponownie, co nie było możliwe od około dekady.
undefined
, bo Bóg tylko wie, z jakiego powodu, używanie void 0
zawsze powróci undefined
niezależnie.
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:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
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;).
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 = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Następnie możesz użyć instrukcji warunkowej, aby sprawdzić, czy zmienna została zdefiniowana ORAZ utworzona instancja w ten sposób ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
lub w celu przetestowania, czy nie zostało zdefiniowane i utworzone wystąpienie ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"