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 nulljest obiektem. Jest jeszcze jedna wartość rzeczy, które nie istnieją, undefined. DOM zwraca nullprawie wszystkie przypadki, w których nie znajduje struktury w dokumencie, ale sama JavaScript undefinedjest 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ż typeofpotraktuje ona niezadeklarowaną zmienną i zmienną zadeklarowaną o wartości undefinedró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 typeofoperatora do bezpiecznego sprawdzenia niezdefiniowanego, ponieważ możliwe było ponowne przypisanie undefinedjak zmienna. Stary sposób wyglądał następująco:
if (typeof yourvar !== 'undefined') // Any scope
Kwestia możliwości undefinedponownego przypisania została naprawiona w ECMAScript 5, który został wydany w 2009 roku. Teraz możesz bezpiecznie używać ===i !==testować undefinedbez użycia, typeofponieważ undefinedjest 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)
typeofoperator ( typeof null == 'object'). nullWartość to wartość prymitywny , który jest jedyną wartością typu Null .
Jedynym sposobem, aby naprawdę sprawdzić, czy zmienna jest, undefinedjest 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.
undefinedto obiekt w javascript to dezinformacja. Czy to stwierdzenie odnosi się do twojej odpowiedzi? Jest to wartość undefinedtypu undefinedprzypisana do globalnego identyfikatora o nazwie undefined.
undefinedzostał 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===undefinedzamiast tego
var x; powyższe spowoduje wygenerowanie błędu
!aprzetestować TRUE undefined, to również prawdziwe dla testuje 0i nulli 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
variablejest zdefiniowany przez var variable;. Ten fragment zastąpi variablezakres 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 windowobiektu. 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 xnawet 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ą, undefinedponieważ xistnieje / został zadeklarowany, ale nie przypisano mu żadnej wartości.
Aby sprawdzić, czy zmienna została zadeklarowana, możesz użyć typeofdowolnej 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 undefinedgdy xnie została uznana, czy też nie zostały zgłoszone i nie został jeszcze przydzielony.
typeofoperatora.
Te voidpowroty operatora undefineddla każdej argumentu / ekspresji przekazywane do niego. abyś mógł przetestować wynik (w rzeczywistości niektóre minizery zmieniają kod z undefinednavoid 0 aby zapisać kilka znaków)
Na przykład:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeofa myślenie undefinedmoż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 0zawsze powróci undefinedniezależnie.
Przyjęta odpowiedź jest poprawna. Chciałem tylko dodać jeszcze jedną opcję. Możesz również użyć try ... catchbloku, 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 catchblok, 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"