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 nullbir 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 undefinedkullanı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/ catchberi typeofbildirilmemiş bir değişkeni tedavi etmek ve değişken değeriyle beyan edecektir undefinedeşdeğer olarak.
Ama, bir değişken deklare olup olmadığını kontrol etmek ve değildir undefined:
if (yourvar !== undefined) // Any scope
Önceden, typeoftanımsız olarak güvenli bir şekilde kontrol etmek için operatörün kullanılması gerekiyordu , çünkü undefinedtıpkı bir değişken gibi yeniden atanabiliyordu . Eski yol şöyle görünüyordu:
if (typeof yourvar !== 'undefined') // Any scope
undefinedYeniden 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 undefinededebilirsiniz .typeofundefined
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)
typeofoperatördür ( typeof null == 'object'). nullDeğ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 undefinedaş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.
undefinedjavascript 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 undefinedtür değeridir . undefinedundefined
undefinedES5'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===undefinedyerine kontrol etmelisiniz
var x; yukarıdakiler hata verir
!agerçek için test undefined, aynı zamanda için de geçerlidir test eder 0ve nullve 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
variableile tanımlanır var variable;. Ve bu snippet variableyerel 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", windownesneyi 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 xolmadığı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ü xmevcut / ilan edilmiştir ancak bir değer atanmış edilmemiştir.
Değişkenin bildirilip bildirilmediğini typeofkontrol 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 undefinedzaman xo takdirde beyan edilmiş VEYA gelmiştir ilan edilmiş ve henüz belirlenmedi.
typeofoperatöre ihtiyacınız yoktur .
voidOperatör döner undefinedbir 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 undefinediçin void 0birkaç karakter kaydetmek için)
Örneğin:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeofve düşünme undefinedyeniden 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 0geri döner undefined.
Kabul edilen cevap doğrudur. Sadece bir seçenek daha eklemek istedim. try ... catchBu 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
}
catchBlok 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"