Bir değişkenin boş olup olmadığı nasıl kontrol edilir?


Yanıtlar:


399

Eşdeğer değiller. İlk önce aşağıdaki blok yürütülür ifhalinde ifadesi myVarolduğunu truthy (yani değerlendirir truedurumunda, ikinci blok çalıştırmak ise, bir koşullu olarak) myVarbaşka herhangi bir değerdir null.

JavaScript'te doğru olmayan tek değerler aşağıdaki gibidir ( yanlış değerler olarak da bilinir ):

  • null
  • undefined
  • 0
  • "" (boş dize)
  • false
  • NaN

69

Bir değişkenin NULL olmadığını şu şekilde test edebilirsiniz:

if (myVar !== null) {...}

myVar boş değilse blok yürütülür .. myVar tanımsız veya yanlış veya 0veya NaNveya başka bir şey olursa yürütülür .


1
Merak edenler için ... Bu boş bir dize ("")ve tanımsız olup olmadığını kontrol etmez . Benim keman referans olarak bakın: jsfiddle.net/b0tm7yaf
Barrosy

47

Bu yazıyı okuyun: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Genel olarak JavaScript için bazı güzel ipuçları var, ancak bahsettiği bir şey, null gibi kontrol etmeniz gerektiğidir:

if(myvar) { }

Ayrıca, farkına varamayacağınız 'falsey' olarak kabul edilen şeylerden de bahseder.


33
Bu kontrol aslında güvenli değil. Myvar 0, false veya başka bir falsy değeri ise test başarısız olur (yalnızca boş olup olmadığını kontrol etmek istiyorsanız). Bu yüzden, değişkeni asla başka bir falsy değerine sahip olamazsa null değerinin olmadığını kontrol etmek için kullanın.
Werzi2001

2
bağlantı artık çalışmıyor. Burada yazı gibi görünen şeyin bir kopyasını buldum: appendto.com/2010/10/… Yine de garip, çünkü İlyas'ın gönderisi (ve örnek kod) yazar olduğunu gösteriyor, ancak orada yazar olarak listelenmiyor ...
thepaulpage

2
Görünüşe göre bu site artık mevcut değil. Bilgileri harici bir bağlantıdan ziyade gönderinin kendisine ekleyebilmeniz yararlı olacaktır.
apraetor

Değer mevcutsa bu çalışmaz, ancak 0 (sıfır)
zmechanic

15
  • içindeki kod if(myVar) { code }sadece myVarşuna eşit olduğunda çalıştırılamaz : false, 0, "", null, undefined, NaNya da hiç tanımlanmamış değişkenmyVar (daha sonra kod yürütmeyi durdurur ve istisna atar).
  • içindeki kod if(myVar !== null) {code}sadece myVarona eşit olduğunda nullveya onu hiç tanımlamadığınızda (istisna atar) çalıştırılmaz.

Burada hepsi var ( src )

Eğer

resim açıklamasını buraya girin

== (olumsuzlaması ! = )

resim açıklamasını buraya girin

=== (olumsuzlaması ! == )

resim açıklamasını buraya girin


9

Daha yeni karşılaştığım başka bir senaryo daha var.

Bir ajax çağrısı yaptım ve veri bir dize formatında null olarak geri aldım. Ben böyle kontrol etmek zorunda kaldı:

if(value != 'null'){}

Yani, null, gerçekten null olmak yerine "null" yazan bir dizedir.

DÜZENLEME: Ben o yolu olarak bu satmıyorum anlaşılmalıdır gerektiğini yapılabilir. Bunun yapılabilecek tek yol olduğu bir senaryom vardı. Neden olduğundan emin değilim ... belki de arka ucu yazan adam verileri yanlış sunuyordu, ama ne olursa olsun, bu gerçek hayat. Bunun doğru olmadığını anlayan biri tarafından aşağı oylanan ve daha sonra gerçekten yardımcı olduğu biri tarafından yukarı oylanan görmek sinir bozucu.


Bunun yerine, nulldizelerle karşılaştırmak yerine değerinizi ayrıştırın .
Bergi

1
Bu cevap, uygulanmasını anlasanız da anlamasanız da meşrudur. Gerçekten işe yarayan şeyleri yayınlamak için indirilmeyi takdir etmiyorum. Dokunmadan önce bir oylama olduğunu fark ettiniz mi? Çünkü gerçek bir senaryo.
Flat Cat

3
evet, ve ben düşürdüm çünkü bunun yanlış bir çözüm olduğunu düşünüyorum. Bir ajax çağrısı durumunda value = JSON.parse(value), basit ve uygun value != nulltesti daha iyi yapmalı ve kullanmalısınız
Bergi

2
Görünüşe göre anlamıyorsun. Yaptığını düşündüğünü anlıyorum, ama yapmıyorsun.
Düz Kedi

4
Bunun çalışan bir çözüm olduğunu anlıyorum. Ama bunun iyi bir tavsiye olduğunu düşünmüyorum, bu yüzden lütfen oylarıma saygı gösterin.
Bergi

1

myVarnull ise , blok başka bir şekilde yürütülmezse yürütülür.

if (myVar != null) {...}


Dize 'null'değil, özel değer null.
Micah Walter

1

Bazen tanımlanmamışsa bile hazırlanması daha iyidir. Bunun için typeof kullandım

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

Burada listelediğiniz iki koşullu ifade birbirinden daha iyi değildir. Kullanımınız duruma bağlıdır. 2. örnekte bu arada bir yazım hatası var. Ünlem işaretinden sonra yalnızca bir eşittir işareti olmalıdır.

İlk örnek, myVar'daki değerin doğru olup olmadığını belirler ve {...}

İkinci örnek, myVar değerinin null değerine eşit olmadığını değerlendirir ve bu durumda doğruysa kodunuzu {...} içinde yürütür

Daha fazla teknik için koşullu ifadelere bakmanızı öneririm. Onlara aşina olduktan sonra, onlara ne zaman ihtiyacınız olduğuna karar verebilirsiniz.


12
Bu muhtemelen ikinci örnekte bir yazım hatası değildir. Bu saniye =çok önemlidir ve soru için büyük bir fark yaratır. Belki JavaScript'in varlığının !==ve ===operatörlerinin farkında değilsinizdir ?
Tim Down

1
Bunu işaret ettiğiniz için teşekkürler. Hemen bunun bir yazım hatası olduğunu düşündüm, ama şimdi bir süredir görmediğim ve unuttuğumu hatırlıyorum.
DOKTOR
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.