2010-10-08 8 views
14

JavaScript'i kullanarak, 0'ı nasıl algılamıyor, ancak boş veya boş dizeleri algılamıyor mu? Sorunuzun BaşlıktanBu ifade 0'ı algılamamalı; Yalnızca boş veya boş dizeler

+0

kullanım 'val algılar ===" “val değerinin ikinci testte bir dizilim olmasını sağlamak için. – Warty

+1

Seni bilmiyorum, ancak bu cümleyi mantıklı bir şekilde takip etmem benim için daha kolay: "Boş veya boş dizeleri nasıl algılayabilirim, ancak 0 değil". Bunu söylememin tek nedeni, kodun düzenini sırayla yapmanın bazen daha kolay uygulanmasını sağlayabilmesidir. –

cevap

19

:

if(val === null || val == "") 

Ben sadece bir = boş dize ile val-karşılaştırmak sıkı-eşitlik çalışırken unuttum görebilirsiniz: Firebug ile

if(val === null || val === "") 

Test:

>>> 0 === null || 0 == "" 
true 

>>> 0 === null || 0 === "" 
false 

DÜZENLEME: açıklama yerine CMS'nin yorumuna bakın.

+0

Oh, boş bir dize == ile 0 ile aynı mı? Garip. Teşekkürler! – Hamster

+1

Evet; Aslında bu, === 'over' == 'tercih etmenin en büyük nedenlerinden biridir. Otomatik dönüştürme nedeniyle, "false == 0 ==" "', ancak 'false! == 0! ==" "'. – Amber

+1

İyi, güzel +1. * Çeviri * için daha iyi bir kelime olur mu * zorla *? (sadece yüksek sesle düşünüyorum) :) – alex

0

Doğru bir şekilde anladıysam boş olmayan bir dizeyi mi algılamak istiyorsunuz?

function isNonEmptyString(val) { 
    return (typeof val == 'string' && val!=''); 
} 
/* 
    isNonEmptyString(0); // returns false 
    isNonEmptyString(""); // returns false 
    isNonEmptyString(null); // returns false 
    isNonEmptyString("something"); // returns true 
*/ 
18

sıfıra hariç tüm Falsey değerlerini saptamak istiyorsanız:

if (!foo && foo !== 0) 

Yani bu null, boş dizeleri, false, undefined vb

+0

Neredeyse oradasınız, 'etc' ile ne demek istediğinizi netleştirebilirsiniz. – SoEzPz