2012-08-08 19 views
9

Değişkenin tanımsız olup olmadığını denetleyen yeniden kullanılabilir bir işlev oluşturmaya çalışıyorum. Tuhaf olan şey, kodu çalıştırmak için değişkeni işleve geçirdiğimde işe yaramamasıdır, ancak işlevin dışında aynı mantığı kullanırsam, işe yarıyor. Bu işlevi elde etmek için herhangi bir yolu var mı?Tanımlanmamış değişkeni çalışmaya geçirirken hata oluştu?

//THIS WORKS AND RETURN FALSE 
alert(typeof sdfsdfsdfsdf !== 'undefined'); 

//THIS GIVES AN ERROR, WHY? 
//Uncaught ReferenceError: sdfsd is not defined 
function isDefined(value) { 
     alert(typeof value !== 'undefined' && value !== null) 
} 

isDefined(sdfsd); 

Canlı örnek burada (hatalar için konsolu kontrol edin): http://jsfiddle.net/JzJHc/

+0

Bunu yapamazsınız. Varsa onu test etmek için fonksiyonunuza nasıl girebilirsiniz? Ayrıca bu: 'typeof value! == 'undefined' && value! == null 'gereksiz yere gereksizdir. Eğer 'null' veya 'undefined' testini istiyorsanız, sadece' value == null' yapın. Aynı şeyi başarır. Son paragraf için –

cevap

10
bir typeof testinde

olmadıkları müddetçe geçmek için çalıştığınızdaSitemsiteye ilan edilmemiş bir değişken kullanamazsınız

bildirilmemiş bir değişkeni kullanan bir işlev olarak bildirilmemiş bir değişken. Sen, hata arayan olduğunu fark Eğer işleve geçirmeden önce

if (typeof sdsdsd !== 'undefined') 

için kontrolü gerçekleştirmesi gerekiyor isDefined

içine edeceğiz. Temel olarak bu, 'un bildirilmemiş değişkenleri kabul eden isDefined işlevini yapamayacağı anlamına gelir. Fonksiyonunuz sadece tanımlanmamış özellikler için çalışabilir (etrafta dolaşmak için sorun yok)

Yine de merak ediyorum, var olmayan bir değişkeni geçtiğiniz gerçek dünya vakası nedir? Tüm değişkenlerinizi beyan etmelisiniz ve zaten var olmalıdırlar. var sdsdsds bildirmiş olsaydınız, undefined değeriyle birlikte olurdu ve isDefined işleviniz gayet iyi çalışıyordu.

+0

+1 * özellikle *. –

+0

Gerçekten de, son paragrafın beni daha zarif bir şekilde yeniden mimar düşünmeye itti. Benim senaryoda bir MVC görünümünde bir değişken oluşturuluyor olmasıdır. Ancak, görünümde herhangi bir sonuç yoksa, görünümün işlenmemesi için bir koşulu vardır. Bu yüzden benim başlatım Javascript (başka bir görünümden), bu nesnenin var olup olmadığını kontrol eder veya bir eylemi gerçekleştirmez. Yani haklısınız, MVC koşulu dışında değişken bildirmeliyim. Tavsiye için teşekkürler! – TruMan1

+0

Bildirilmeyen bir değişken kullanabileceğiniz başka bir durum * delete *. – zsong

İlgili konular