DOMu ayrıştırmak için
cheeriokullanan bir
nodekazıyıcı oluşturuyorum. Bu daha çok vanilya javascript ile ilgili bir soru. Kazıma işlemimin bir bölümünde, bir değişkene bazı içerikler yüklüyorum, ardından değişkenin
uzunluğunu' kontrol ediyorum, bunun gibi:
var theHref = $(obj.mainImg_select).attr('href');
if (theHref.length){
// do stuff
} else {
// do other stuff
}
Bu, $(obj.mainImg_select).attr('href')
öğesinin bulunmadığı bir url ile karşılaşana kadar gayet iyi çalışıyor. Benim theHref.length
kontrolümün bunu hesaba katacağını ve else: do other stuff
deyimine atlayacağını varsaydım, ancak bunun yerine şunu elde ettim:
TypeError: Cannot read property 'length' of undefined
Burada neyi yanlış yapıyorum ve bunu nasıl düzeltebilirim?
undefined öğesine karşı kontrol ederek theHref
öğesinin tanımlı olup olmadığını kontrol edebilirsiniz.
if (undefined !== theHref && theHref.length) {
// `theHref` is not undefined and has truthy property _length_
// do stuff
} else {
// do other stuff
}
Kendinizi null
gibi sahte değerlere karşı da korumak istiyorsanız, theHref
in doğru olup olmadığını kontrol edin, bu biraz daha kısadır
if (theHref && theHref.length) {
// `theHref` is truthy and has truthy property _length_
}
Boş bir ""
dizesi ile tanımlanmamış bir değişken arasında fark vardır. Href'in uzunluğundan ziyade tanımlı bir dize içerip içermediğini kontrol ediyor olmalısınız:
if(theHref){
// ---
}
Yine de uzunluğu kontrol etmek istiyorsanız, bunu yapın:
if(theHref && theHref.length){
// ...
}
Uzunluk özelliği için bir tür sayısal karşılaştırma yapmıyorsanız, if deyiminde kullanmamanız daha iyidir, sadece do deyin:
if(theHref){
// do stuff
}else{
// do other stuff
}
Boş (veya bu durumda olduğu gibi tanımsız) bir dize yanlış olarak değerlendirilecektir (tıpkı sıfır uzunluğunda olduğu gibi).