2012-03-28 15 views
7

Birisi bana bunun neden boolean (false) yerine boş bir dize ("") döndürdüğünü açıklayabilir mi? Bu çalışır beklendiği gibiJavascript shorthand bir boolean testi olması gereken dizge döndürüyor

var x = ""; 
alert(x && x.length > 0); 

... doğru dönen: Temelde sadece bir değer bir değişken olup olmadığını görmek için basit bir stenografi denetimi yapmak çalışıyorum

var y = "abc"; 
alert(y && y.length > 0); 

(sağlanması bu değil undefined, null veya boş string).

Her testi tek tek yapabildiğimi biliyorum (x == null, typeof x == 'undefined', x == '') - Sadece Javascript'in neye benzediğine dair bir dize döndürdüğünü anlamaya çalışıyorum bir boole testi.

+4

notu (x) ' – ajax333221

+0

' alert (typeof x! = Undefined && x.length> 0) 'gibi bir şeyle kısaltabiliyor olmalısınız, çünkü her ikisi de boole döner, altho, eğer x tanımlanmamışsa, hata atabilir (en benzer şekilde) çünkü 1. argümanı hata yapabilir, bu bilgiyi mini func veya inline – SpYk3HH

cevap

7

JavaScript'te koşullu bir operatör memnun olduğunda, değerlendirilen son değeri döndürür.

var x = ""; 
alert(x && x.length > 0); 

Boş bir dize Falsey, yani bir durumda sadece x kullandığınızda, bu yanlış olacaktır. LHS yanlış ise, && kullanıyorsunuz, bu nedenle RHS'yi denetlemekle uğraşmak için bir neden yoktur. Bu short circuit evaluation. Bu nedenle, son değerlendirilen bölüm, boş dize, alert()'a döndürülür.

var y = "abc"; 
alert(y && y.length > 0); 

olmayan bir boş dize truthy olduğunu. Bu nedenle LHS true ve && olduğu için, RHS değerlendirilir (tüm koşulun true olup olmadığını bilmek gerekir). y.length > 0'un dönüş değeri true olup alert() öğenize geçirilir.

+0

'a bölmek daha iyi olacaktır. , JS falsey değerleri = 0, "", false, null, undefined, NaN " – ajax333221

+0

teşekkürler @alex, mükemmel bir anlam ifade eder. – kman

0

Geriye ve boş bir dizge çünkü x zaten tanımlanmış, sadece boş.

Bu, alert(x) ifadenizin ilk kısmının boş bir dize göstermesine neden olur.

Boş/boş bir dize bakmanız gerekiyorsa, bunun gibi bir şey deneyin.&& (VE operatörü) kullanılarak

String.isNullOrWhiteSpace = function (str) { 
    if (typeof str === "string") { 
     var isNullOrWhiteSpace = false; 

     // Check for null string 
     if (str == null || typeof str === "undefined") isNullOrWhiteSpace = true; 

     // Check for string with whitespace 
     if (str.replace(/\s/g, '').length < 1) isNullOrWhiteSpace = true; 

     return isNullOrWhiteSpace; 
    } 

    if (typeof str === "undefined" || str == null) { 
     return true; 
    } 
}; 
0

koşullu işlemleri ne zaman durur: false

  • başarıyla sonuna kadar izlediği için değerlendirilen durumların

    • One true
    • için her şeyi değerlendirerek

    Koşullu işlemlerin sonucu durmadan önce son değerlendirilecek (değil, değil) sarily bir boolean)

    !!(...), örnek etrafında gerçekboolean, sen sarmak herşeyi dönen zorlamak için: Eğer bir `!!` kullanarak boolean` dönen zorlayabilir

    alert(typeof !!(...) === "boolean"); //will always be true no matter what conditions are inside 
    
  • İlgili konular