2012-05-14 30 views
5

ajax çağrısında tam bir işlevi işlemeye çalışıyorum. Değer tanımlanmamışsa, boş bir dize olarak bir varyasyon eklemek istiyorum. Aksi halde, değeri bir dizi dizisine almak istiyorum.Undefined ile sorun yaşıyorsanız! == undefined

Sorun, şu anda değişkenin değeri döndürüldüğünde bile, if ifadesini girdiğimde sorun şu şekildedir: undefined. Burada neyi özlüyorum? Eğer bir dize olarak "undefined" ile karşılaştırmak gerekir böylece

completefunc: function (xData, Status) { 
     $(xData.responseXML).SPFilterNode("z:row").each(function() { 
     if(typeof $(this).attr("ows_Products") !== undefined) { 
      console.log($(this).attr("ows_Products")); 
      arr = $(this).attr("ows_Products").split(','); 
     } 
     else { 
      arr = ""; 
     } 
     }); 
    } 
+1

var bu önceki soruya bir göz: http://stackoverflow.com/questions/776950/javascript -defined-undefined –

+0

@web_bod, == to ===, anlam null == undefined = true ile karşılaştırıldığında daha fazla görünüyordu, oysa null === undefined = false – Wesley

cevap

16

typeof, bir dize değeri döndürür. Örneğin,

if(typeof $(this).attr("ows_Products") !== "undefined") { ... } 

Düzen - daha fazla bilgi: Eğer MDN page for typeof kontrol ederse

, bunu göreceksiniz:

typeof operatörü tipini belirten bir dize döndürür değerlendirilmemiş işlenen.

Bu (JavaScript muhtemelen String, Array vb gibi bir yapıcı işlevi döndürme gibi bir şey olurdu) Type kendisi dönen çok farklıdır. typeof kullanırken nedenle, her zaman, "object" gibi dizelere "string", "undefined", karşılaştırma olacağım vs.

+0

Ahh evet. Bazen küçük şeyler. – Wesley

+5

Çözümün sadeliği, genellikle, bu yoruma ne kadar zaman harcıyorsun? – jmar777

+0

+1, ters orantılı olarak ters orantılıdır! – gdoron

0
if($(this).attr("own_Products")){ 
     arr = $(this).attr("ows_Products").split(','); 
}else{ 
     arr="" 
}