Dizenin boş veya boş olup olmadığını kontrol etmenin en kolay yolu


87

Boş veya boş dizeyi kontrol eden bir kod aldım. Testte çalışıyor.

eitherStringEmpty= (email, password) ->
  emailEmpty = not email? or email is ''
  passwordEmpty = not password? or password is ''
  eitherEmpty = emailEmpty || passwordEmpty         

test1 = eitherStringEmpty "A", "B" # expect false
test2 = eitherStringEmpty "", "b" # expect true
test3 = eitherStringEmpty "", "" # expect true
alert "test1: #{test1} test2: #{test2} test3: #{test3}"

Merak ettiğim, bundan daha iyi bir yol olup olmadığı not email? or email is ''. string.IsNullOrEmpty(arg)CoffeeScript'teki C # eşdeğerini tek bir çağrı ile yapabilir miyim ? Bunun için her zaman bir işlev tanımlayabilirim (yaptığım gibi) ama dilde eksik olan bir şey olup olmadığını merak ediyorum.

Yanıtlar:


118

Evet:

passwordNotEmpty = not not password

veya daha kısa:

passwordNotEmpty = !!password

1
Bu, iki cevaptan daha çok "javascript-y" dir. Özellikle !!, temelde boolean'a çevirmenin yaygın bir yolu olan sürümü kullanıyorsanız . Önemliyse, bu neredeyse kesin olarak Jeremy'nin önerdiği gibi bir işlevi tanımlamaktan daha hızlıdır.
Aaron Dufour

Hepsi çalışıyor, ama bu en çok olumlu oyu aldı. Okunabilirlik için stackoverflow.com/q/8127920/30946'yı seviyorum .
jcollum

3
Tüm boşluklarla dizge için başarısız oluyor ... bu yüzden boşluk için çalışmıyor
Arkhitech

1
@Arkhitech blank boşla aynı şey değil, bu yüzden işe yarıyor.
jcollum

2
Okunabilirlikteki zevkime göre fazla "zeki"; kullanacağımı sanmıyorum ama yine de iyi iş çıkardın
çıkardın PandaWood

37

Tamamen eşdeğer değildir, ancak email?.lengthyalnızca emailboş değilse ve sıfır olmayan bir özelliğe sahipse doğru olacaktır .length. Eğer notsiz ve sayı dizileri hem istediğiniz gibi bu değer sonuç davranması gerekir.

Eğer emailbir nullya da yok .length, o email?.lengthkadar değerlendirecek nullFalsey olan. Eğer bir .lengthdeğeri varsa, o zaman bu değer uzunluğuna göre değerlendirilecektir, eğer boşsa yanlış olacaktır.

İşleviniz şu şekilde uygulanabilir:

eitherStringEmpty = (email, password) ->
  not (email?.length and password?.length)

1
@pyrotechnick Soru, Dizileri Dizelerden ayırt etmekle ilgili sorulmadı. Boş değerleri ve boş dizeleri boş olmayan dizelerden ayırt etmeyi sordu. Demek istediğim, kodun aynı zamanda boş değerleri ve boş dizileri boş olmayan dizilerden ayırt edebilmesiydi, ancak bu sorunun kapsamı dışındaydı.
Jeremy

Bununla birlikte, "yaStringEmpty", sağladığınız yöntem için yanlış bir addır.
piroteknik

14

Bu "doğruluk" un işe yaradığı bir durumdur. Bunun için bir işlev tanımlamanıza bile gerek yok:

test1 = not (email and password)

Neden işe yarıyor?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false

1
.trim()Doğrulama mantığınızın bir parçası olarak değeri zaten çağırdığınızı varsayıyorum . Cevap daha çok CS sözdizimi hakkındadır.
Ricardo Tomasi

5
unless email? and email
  console.log 'email is undefined, null or ""'

Öncelikle e-postanın tanımsız olup olmadığını ve varoluşsal operatörle boş olmadığını kontrol edin, ardından var olduğunu biliyorsanız, and emailparça yalnızca e-posta dizesi boşsa yanlış döndürür.



1

İçeriğin bir dize olup olmadığını, null olmadığını ve bir dizi olmadığını kontrol etmeniz gerekirse, basit bir tip karşılaştırma kullanın:

 if typeof email isnt "string"

typeof email isnt "string"her ikisi için de yanlış döndürür ''ve'a'
jcollum

1

İşte bunu yapmanın çok kolay bir yolunu gösteren bir jsfiddle .

Temel olarak bunu yaparsınız javascript:

var email="oranste";
var password="i";

if(!(email && password)){
    alert("One or both not set");        
}
else{
    alert("Both set");   
}

Kahve kağıdında:

email = "oranste"
password = "i"
unless email and password
  alert "One or both not set"
else
  alert "Both set"

Umarım bu birine yardımcı olur :)


1

Bence soru işareti, eğer bir şey varsa, bir şey üzerinde bir işlevi çağırmanın en kolay yolu.

Örneğin

car = {
  tires: 4,
  color: 'blue' 
}

rengi almak istiyorsun, ama sadece araba varsa ...

kahve tablosu:

 car?.color

javascript'e çevrilir:

if (car != null) {
  car.color;
}

varoluşsal operatör olarak adlandırılır http://coffeescript.org/documentation/docs/grammar.html#section-63


Boş dize, mevcudiyet kontrolü için true değerini döndürür.
jcollum

1

@Thejh'nin cevabının boş dizeyi kontrol edecek kadar iyi olduğundan eminim AMA, sık sık 'Var mı?' Sorusunu kontrol etmemiz gerektiğini düşünüyorum. ve sonra 'Boş mu? dize, dizi ve nesneyi içerir '

Bu, CoffeeScript'in bunu yapmasının kısaltılmış yoludur.

tmp? and !!tmp and !!Object.keys(tmp).length

Bu soruyu sırasını tutarsak, bu 1. sırayla kontrol edilir miydi? 2. boş dize değil mi? 3. boş nesne değil mi?

bu yüzden, olmasa bile tüm değişkenler için herhangi bir sorun yoktu.



0

Kabul edilen cevap yerine passwordNotEmpty = !!passwordkullanabilirsiniz

passwordNotEmpty = if password then true else false

Aynı sonucu verir (sadece sözdizimindeki fark).

İlk sütunda bir değer, ikincisinde ise şunun sonucu if value:

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
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.