2010-04-20 10 views
24

Bir Javascript değişkeninin undefined olup olmadığını test etmeye çalışıyorum.Javascript dizi değeri undefined ... O sınamak için nasıl test edebilirim

Biliyorsun ilk "inanılmaz" belirten bir uyarı alamazsanız 'tanımsız' edilecek predQuery [preId] değerini bekliyor değilim göreceksiniz. Ama çoğu zaman bu yüzden benim beyanı

predQuery[preId]=='undefined') 

düzgün tanımlanmamış elemanları eşleşen olmadığını tahmin ediyorum, yok.

if((predQuery.length < preId) || (predQuery[preId]=="") || (predQuery[preId]=='undefined')){ 
    alert("its unbelievable"); 
    alert(predQuery[preId]); 
    queryPreds[variables] = preId; 
    queryObjs[variables] = objId; 
    predQuery[preId] = variables; 
} 
else { 
    alert(predQuery[preId]); 
    var predIndex = predQuery[preId]; 
    queryPreds[predIndex] = preId; 
    queryObjs[predIndex] = objId; 
} 

Gerekirse daha fazla kod ekleyebilirim.

if (predQuery[preId] === undefined) 

için

+0

işleri benim ifadesi varsa. – Ankur

+0

Eğer gösterilmiyorsa. – deceze

+0

@deceze ... Demek istediğim, kodumu değiştirdim. Bununla ilgili soruyu henüz düzenlemedim, çünkü bu aynı problemle gelecekteki insanlara yardım etmeyecek. – Ankur

cevap

55

array[index] == 'undefined' "tanımsız" dizesine dizi endeksinin değerini karşılaştırır bakın.
Muhtemelen türünü ile karşılaştıran typeof array[index] == 'undefined''u arıyorsunuzdur.

+3

+1, değiştirilemeyen 'undefined' yerine –

+2

yerine immutable tiple karşılaştırır. Bu, tek başına [undefined] [0]' ve '[] [0]' arasında ayrım yapamaz. Dizininizin boş olabileceği ihtimali varsa, bu senaryoyla karşılaşacaksınız. – sighrobot

1

Kontrol operatöre sıkı eşit kullanın. comparison operators

+1

nerdeyse - ama en iyi uygulama deceze diyor, yazım tipini karşılaştır, çünkü tanımsız olarak tanımlanamaz. –

+1

Undefined olarak tanımlanamaz. Sadece window.undefined = "lolz" ile; – Warty

+5

Yeniden yapılandırılan her yerleşike karşı koruma sağlayan JavaScript yazmak imkansız (neredeyse her şey olabilir). Yeniden tanımlamalardan kaçınmak için kodu daha az okunabilir hale getirmeyi savunmuyorum. 'typeof', başka bir kullanıma sahip, çapraz pencere komut dosyalarındaki veri türlerini algılamak için kullanılır, ancak bu zaten' undefined 'için geçerli değildir. – bobince

1

deneyin: typeof(predQuery[preId])=='undefined'
veya daha genel olarak: typeof(yourArray[yourIndex])=='undefined'
Yanlış döndüren tanımlanmamış için "tanımsız" kıyaslıyorsun =)

10

Gün içinde bir çok dizi dizinini kontrol ediyoruz bir dize "undefined" içeren, ya should typeof operatörünü kullanın:

typeof predQuery[preId] == 'undefined' 

Ya undefined küresel özelliğini kullanın:

küresel özellik yazılabilir olduğundan
predQuery[preId] === undefined 

ilk yolu,daha güvenli olduğunu ve herhangi bir başka değere değiştirilebilir.

4

Roma'ya daha (birçok) yol vardır:

//=>considering predQuery[preId] is undefined: 
predQuery[preId] === undefined; //=> true 
undefined === predQuery[preId] //=> true 
predQuery[preId] || 'it\'s unbelievable!' //=> it's unbelievable 
var isdef = predQuery[preId] ? predQuery[preId] : null //=> isdef = null 

şerefe!

6
predQuery[preId]=='undefined' 

Sen'undefined'dize karşı test ediyoruz; Bu testi, bir dize döndüren typeof testiyle karıştırdınız. Muhtemelen özel değere undefined karşı test edilecek demek:

predQuery[preId]===undefined 

Not sıkı-eşitlik operatörü genellikle-istenmeyen maçı null==undefined önlemek için. Ya preIdpredQuery üyesi değildir, ya da üyesi ama özel undefined değere ayarlanmış bir değeri vardır:

Ancak bir undefined değeri elde iki yolu vardır.Çoğunlukla, sadece mevcut olup olmadığını kontrol etmek istersiniz; bu durumda in operatör daha uygundur:

!(preId in predQuery) 
0

Bu kod çok iyi ben benim maddesi olarak (typeof (predQuery [preId]) == 'tanımsız') kullandık

function isUndefined(array, index) { 
    return ((String(array[index]) == "undefined") ? "Yes" : "No"); 
} 
+1

Neden === yerine == kullanıyorsunuz? – leofontes

İlgili konular