Soru JavaScript'te boş bir dizeyi nasıl kontrol edersiniz?


bunu gördüm iplikancak JavaScript’e özel bir örnek görmedim. Basit mi string.Empty JavaScript’te kullanılabilir veya yalnızca kontrol edilmesi gereken bir durumdur ""?


2147
2017-09-30 17:17


Menşei


Sadece FYI, String sınıfı için en kullanışlı API'ların olduğunu düşünüyorum Mozilla ve javascript seti. [Elated.com] (elated.com/articles/working-with-strings ) String'in tüm özellikleri, yöntemleri, ... hakkında bir öğretici vardır. Lütfen dikkat: Mozilla bağlantısı güncellendi developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... - Gene T


Cevaplar:


Eğer herhangi bir değer olup olmadığını kontrol etmek isterseniz

if (strValue) {
    //do something
}

Boş bir dize için özel olarak kontrol etmeniz gerekiyorsa, kontrol etmeyi düşünürdüm "" en iyi bahistir, === Şebeke (böylece, aslında, karşılaştırdığın bir dize olduğunu biliyorsun).

if (strValue === "") {
    //...
}

2743
2017-09-30 17:20



Uzunluk özelliğinin sınanması, dizgeyi "" ile sınamadan daha hızlı olabilir, çünkü yorumlayıcı, dize değişmezinden bir String nesnesi oluşturmak zorunda kalmaz. - Vincent Robert
@Vincent, Chrome geliştirici araçlarında bazı naif profiller yapıyor, test ediliyor === '' vs .length herhangi bir iyileştirme göstermedi (ve kullanarak .length sadece bir dizinin olduğunu varsayabilirsin) - bdukes
Bu tür mikro optimizasyonları önemsemeye başladığınızda, bacaes, Chrome'un performans sorunlarınızın çoğunu yaşadığınız tarayıcı olduğunu düşünmüyorum. - Vincent Robert
Sadece "boş dize" tanımınız beyaz boşluk içeriyorsa, bu çözüm uygun değildir. Yukarıda 1 veya daha fazla boşluk içeren bir dize true değerini döndürür. JQuery'yi kullanıyorsanız bunu basitçe kullanabilirsiniz: eğer ($ .trim (ref) .length === 0) - bu soruya benzer bir soruya göre: stackoverflow.com/questions/2031085/... - CodeClimber
Beklenildiği gibi .length > 0 aslında Çok daha hızlı bir dize değişmezini karşılaştırmaktan! Bunu kontrol et jsPerf - Chad


Bir dizenin boş olup olmadığını kontrol etmek için boş veya undefined kullanıyorum:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

Bir dizenin boş olup olmadığını kontrol etmek için boş veya undefined kullanıyorum:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

Bir dizenin boş olup olmadığını veya yalnızca beyaz boşluk içerip içermediğini kontrol etmek için:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

903
2017-07-16 01:45



neden 0 === str.length yerine str.length === 0? - Vincent
@Vincent Koşullar genellikle böyle yazılır if (variable == constant value) ve eğer bir '=' unutursanız, sabit değeri test yerine değişkene atayabilirsiniz. Eğer bir if'de değişken atayabildiğiniz için kod çalışmaya devam edecektir. Bu durumu yazmanın daha güvenli bir yolu, sabit değeri ve değişkeni tersine çevirmektir. Bu şekilde kodunuzu test ettiğinizde bir hata görürsünüz (atamada geçersiz el tarafı). Ayrıca, JSHint gibi bir koşulu şartlarda ödevi reddetmek için kullanabilir ve yazarken uyarıda bulunabilirsiniz. - florian
utanç /^\s*$/.test(str) gerçekten okunabilir değil - belki daha basit kod veya regex kullanarak boşlukları daha iyi olurdu? görmek stackoverflow.com/questions/6623231/... ve ayrıca stackoverflow.com/questions/10800355/... - Adrien Be
/^\s*$/.test(str) str.trim () ile değiştirilebilir. length === 0 - Schadenfreude
@Vincent buna "Yoda Koşulları" da denir if blue is the sky. Görmek dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html - AZ.


Yukarıdakilerin hepsi iyi ama bu daha da iyi olacak. kullanım !!(değil) Şebeke.

if(!!str){
some code here;
}

veya tip dökümü kullanın:

if(Boolean(str)){
    codes here;
}

Her ikisi de aynı işlevi yapar, değişkenleri boolean'a yazın, str bir değişkendir.
İade false için null,undefined,0,000,"",false.
İade true "0" ve beyaz boşluk "" için.


225
2018-03-30 13:34



Neden bu "daha da iyi"? - Mene
Davranışı arasında bir fark var mı if(str) ve if(!!str)? - Peter Olson
@PeterOlson, içerik için birden fazla dizeyi kontrol eden bir boolean olarak bir değişken kaydetmeye çalışıyorsanız, bunu yapmak istersiniz. var any = (!!str1 && !!str2 && !!str3) Orada da bir sayı varsa ele alma - John Ruddell
Bu her zaman kullandığım çözümdür. !!str.trim() dizenin sadece whitespaces'den yapılmadığından emin olmak için. - Dario Oddenino
Kesmek gibi değil. Boolean(str) çok daha okunabilir ve daha az "wtfish" dir. - shinzou


Eğer dizgenin sadece bir miktar boş alan olmadığından emin olmanız gerekiyorsa (bunun form doğrulaması için olduğunu varsayalım) boşluklarda bir değişiklik yapmanız gerekir.

if(str.replace(/\s/g,"") == ""){
}

88
2017-09-30 23:08



Ancak, aslında test etmek istediğiniz şey, boşluk olmayan içeriğe sahip bir dizedir. Bunu test etmek için daha az pahalı bir yol var mı? - flash
Uzunluk özelliği hakkında nasıl? - driAn
Tüm boşlukları kaldırmak yerine, neden boş alan olmadığını kontrol etmiyorsunuz? Boş olmayan bir karakter varsa, erken boşaltabildiği 2 avantajı vardır ve daha sonra karşı karşıya kaldığınız yeni bir dizgeye sahip değildir. if(str.match(/\S/g)){} - mpen
@Mark FYI, global değiştiriciye ihtiyacınız olmaz, çünkü boşluk olmayan bir karakterin ilk oluşumunun eşleşmesi, dizenin boş olmadığı anlamına gelir: str.match(/\S/) - neezer
Önemli: Bu, eğer str olduğu null. - nfechner


Str.Empty'ye ulaşabileceğiniz en yakın şey (str'nin bir String olduğu önkoşul ile):

if (!str.length) { ...

75
2017-09-30 19:17





Kullanırım :

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof this == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
  })) // false

44
2017-07-09 18:52



Bu çözüm, daha fazla dil agnostiktir. Kullanması gereken tek JavaScript özelliği typeof'dir. Bu yüzden, farklı tarayıcılarda uygulamalara güvenmediğinizde kullanabileceğiniz ve daha iyi bir çözüm bulmak için zamanınızın olmadığı bir çözümün iyi bir örneği. (IE, internet erişimi yok). Kanıt gibi bir şey. En temiz değil ama JavaScript hakkında çok şey bilmeden çalışacağından emin olabilirsiniz. - Jeff Davis
Biraz daha ileri gidip, tanımlanmamış bir durum için bir === operatörüyle tırnaklarım. Aksi takdirde sadece basit bir cevaptır. - Carlos Alberto Martínez Gadea
typeof içinde switch benim için çalışmadı. Ekledim if (typeof e == "undefined") test ve işe yarıyor. Niye ya? - Lucas


var s; // undefined
var s = ""; // ""
s.length // 0

JavaScript'te boş bir dizeyi temsil eden hiçbir şey yok. Aleyhine bir kontrol yapın length (eğer varlığın her zaman bir dize olacağını biliyorsanız) ""


23
2017-09-30 17:42