Değişkenin tanımlanıp tanımlanmadığını kontrol etmek istedim. Örneğin, aşağıdakiler tanımlı olmayan bir hata atar
alert( x );
Bu hatayı nasıl yakalayabilirim?
Değişkenin tanımlanıp tanımlanmadığını kontrol etmek istedim. Örneğin, aşağıdakiler tanımlı olmayan bir hata atar
alert( x );
Bu hatayı nasıl yakalayabilirim?
Yanıtlar:
JavaScript'te null
bir nesnedir. Var olmayan şeyler için başka bir değer daha var undefined
. DOM null
, belgedeki bir yapıyı bulamadığı neredeyse tüm durumlar için döner , ancak JavaScript'in kendisinde undefined
kullanılan değerdir.
İkincisi, hayır, doğrudan bir eşdeğeri yoktur. Gerçekten özel olarak kontrol etmek istiyorsanız, şunları yapın null
:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Eğer bir değişken olup olmadığını kontrol etmek istiyorsanız, bu sadece ile yapılabilir try
/ catch
beri typeof
bildirilmemiş bir değişkeni tedavi etmek ve değişken değeriyle beyan edecektir undefined
eşdeğer olarak.
Ama, bir değişken deklare olup olmadığını kontrol etmek ve değildir undefined
:
if (yourvar !== undefined) // Any scope
Önceden, typeof
tanımsız olarak güvenli bir şekilde kontrol etmek için operatörün kullanılması gerekiyordu , çünkü undefined
tıpkı bir değişken gibi yeniden atanabiliyordu . Eski yol şöyle görünüyordu:
if (typeof yourvar !== 'undefined') // Any scope
undefined
Yeniden atanabilir olma sorunu, 2009 yılında piyasaya sürülen ECMAScript 5'de düzeltildi. Artık bir süredir salt okunur olarak kullanmadan güvenle kullanabilir ===
ve !==
test undefined
edebilirsiniz .typeof
undefined
Bir üyenin bağımsız olup olmadığını bilmek, ancak değerinin ne olduğunu umursamak istemiyorsanız:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Eğer bir değişken olup olmadığını bilmek istiyorsanız truthy :
if (yourvar)
typeof
operatördür ( typeof null == 'object'
). null
Değeri a, temel değer sadece bir değerdir, boş türü .
Bir değişkenin gerçekte olup olmadığını test etmenin tek yolu undefined
aşağıdakileri yapmaktır. Undefined öğesinin JavaScript'teki bir nesne olduğunu unutmayın.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Bu iş parçacığındaki diğer çözümlerden bazıları, bir değişkenin tanımlanmış olmasına rağmen tanımlanmamış olduğuna inanmanıza neden olur (örneğin, NULL veya 0 değeriyle).
ReferenceError
.
undefined
javascript bir nesne olduğunu söyleyerek yanlış bilgi olduğunu düşünüyorum . Bu ifade zaten cevabınızla ilgili mi? Adlı genel tanımlayıcıya atanan bir undefined
tür değeridir . undefined
undefined
undefined
ES5'ten beri salt okunur. Güvenle kullanılarak tanımlanmamış için test edebilirsiniz if (x === undefined) {...}
veya böyle kısaltmalar kullanarak: if (x === void 0)
.
Teknik olarak, uygun çözüm (inanıyorum):
typeof x === "undefined"
Bazen tembelleşebilir ve kullanabilirsiniz
x == null
ancak bu, hem tanımsız bir değişkenin x hem de null içeren bir değişkenin true değerini döndürmesini sağlar.
var x;
ve sonra typeof x;
yaptığınız "undefined"
gibi alacaksınıztypeof lakjdflkdsjflsj;
Daha kolay ve daha kısa bir versiyon:
if (!x) {
//Undefined
}
VEYA
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Sık sık yaptım:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Üçlü koşullu işleci de kullanabilirsiniz:
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;
? Bunun a===undefined
yerine kontrol etmelisiniz
var x;
yukarıdakiler hata verir
!a
gerçek için test undefined
, aynı zamanda için de geçerlidir test eder 0
ve null
ve false
. Bu çok yanlış ve kaldırılması gerekiyor.
Sıklıkla en basit yolu kullanırım:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
DÜZENLE:
Değişkeni başlatmadan, "Yakalanmayan ReferenceError: değişken tanımlanmamış ..." için istisna atılır.
Uncaught ReferenceError: variable is not defined
variable
ile tanımlanır var variable;
. Ve bu snippet variable
yerel kapsamda geçersiz kılınır . Bir kapatma veya genel değişkene erişmeyi bekleyen mantığı kırabilir. Yani: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
Başka bir potansiyel "çözüm", window
nesneyi kullanmaktır . Bir tarayıcıdayken referans hata sorununu önler.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Bu böyle olmayacak.
Hata size bunun x
olmadığını bile söylüyor ! Bir değer atanmaktan farklı olan beyan edilmemiştir .
var x; // declaration
x = 2; // assignment
Bildirirseniz x
, bir hata almazsınız. Sen şeklinde bir uyarı alacağı undefined
çünkü x
mevcut / ilan edilmiştir ancak bir değer atanmış edilmemiştir.
Değişkenin bildirilip bildirilmediğini typeof
kontrol etmek için, bir değişkenin var olup olmadığını kontrol etmenin diğer herhangi bir yöntemini başlangıçta aldığınız aynı hatayı yükseltir.
if(typeof x !== "undefined") {
alert(x);
}
Bu, saklanan değerin türünü kontrol ediyor x
. Sadece dönecektir undefined
zaman x
o takdirde beyan edilmiş VEYA gelmiştir ilan edilmiş ve henüz belirlenmedi.
typeof
operatöre ihtiyacınız yoktur .
void
Operatör döner undefined
bir bağımsız değişken / ekspresyon için geçirilen. Sonucun karşı test edebilirsiniz böylece (aslında bazı minifiers kodunuzu değiştirmek undefined
için void 0
birkaç karakter kaydetmek için)
Örneğin:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
ve düşünme undefined
yeniden atanabiliyor, ki bu yaklaşık on yıldır mümkün değil.
undefined
, Tanrı yalnızca hangi nedenin kullanıldığını bilir, kullanmak ne olursa olsun void 0
geri döner undefined
.
Kabul edilen cevap doğrudur. Sadece bir seçenek daha eklemek istedim. try ... catch
Bu durumu işlemek için bloğu da kullanabilirsiniz . Çılgınca bir örnek:
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
}
catch
Blok düzeyinde bir kapsam oluşturduğundan, biraz dağınık olan bloğun farkında olun . Ve elbette, örnek, sorulan soruya cevap vermek için son derece basitleştirilmiştir, hata işlemede en iyi uygulamaları kapsamaz;).
Ben gerçekten benim javascript dosyaları dağınıklık miktarını keser bir değişken bildirildi doğrulamak için küçük bir işlev kullanın. Değişkenin yalnızca var olduğundan değil, aynı zamanda bir değer atandığından emin olmak için değer için bir denetim eklerim. İkinci koşul, değişkenin örneklenip oluşturulmadığını kontrol eder, çünkü değişken tanımlanmış ancak örneklenmemişse (aşağıdaki örneğe bakın), kodunuzdaki değerine başvurmaya çalışırsanız yine de bir hata atar.
Örneklenmemiş - var my_variable;
Örneklenmiş -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Daha sonra, değişkenin hem tanımlandığını hem de bu şekilde başlatıldığını test etmek için koşullu bir ifade kullanabilirsiniz ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
ya da bunun tanımlanmadığını ve anında kullanılmadığını test etmek için ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"