JavaScript'te boş / tanımsız / boş bir dizeyi nasıl kontrol edebilirim?


2852

Bu soruyu gördüm , ancak JavaScript'e özgü bir örnek görmedim. string.EmptyJavaScript'te basit bir metin var mı , yoksa sadece kontrol etme vakası ""mı?


2
sadece FYI, String sınıfı için en yararlı API'ların Mozilla ve javascript kitinde olduğunu düşünüyorum . [elated.com] ( elated.com/articles/working-with-strings ), String'in tüm özellikleri, yöntemleri hakkında bir eğiticiye sahiptir ... Lütfen dikkat: Mozilla bağlantısı geliştirici.mozilla.org/
Gene T


Gereklilik açıkça belirtilmişse çok yardımcı olacaktır. Boş değer hangi değerler için doğru olmalıdır ? "" Öğesinin denetlenmesi, yalnızca değer Tür dizesi ve uzunluk 0 ise true değerini döndürmesi gerektiğini belirtir. Buradaki birçok yanıt, bazı veya tüm falsey değerleri için de true döndürmesi gerektiğini varsayar.
RobG

Yanıtlar:


3568

Sadece herhangi bir değer olup olmadığını kontrol etmek istiyorsanız,

if (strValue) {
    //do something
}

Eğer boş üzerinde boş bir dize için özel olarak kontrol etmek gerekiyorsa, ben karşılaştırarak kontrol düşünürdüm ""kullanarak, en iyi bahis operatörü (eğer, aslında, bir dize Size karşı karşılaştırarak konum olduğunu biliyoruz böylece).===

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

174
Length özelliğinin sınanması, dizeyi "" ile karşılaştırmaktan daha hızlı olabilir, çünkü yorumlayıcı dize hazır bilgisinden bir String nesnesi oluşturmak zorunda kalmaz.
Vincent Robert

26
@Vincent, Chrome geliştirici araçlarında bazı naif profilleme yapıyor, testler === ''vs .lengthfark edilebilir bir gelişme göstermedi (ve .lengthyalnızca bir dizeye sahip olduğunuzu varsayabilirseniz çalışır)
bdukes

26
@bdukes bu tür mikro optimizasyonlarla ilgilenmeye başladığınızda, Chrome'un performans sorunlarınızın çoğunu yaşadığınız tarayıcı olduğunu düşünmüyorum ...
Vincent Robert

15
"Boş dize" tanımınız boşluk içeriyorsa, bu çözüm uygun değildir. 1 veya daha fazla boşluklu bir dize yukarıda true değerini döndürür. JQuery kullanıyorsanız şunu kullanabilirsiniz: if ($ .trim (ref) .length === 0) - benzer bir sorunun
cevabına göre

115
Beklendiği gibi .length > 0, aslında bir dizgi değişmezine kıyasla çok daha hızlı ! Bu jsPerf
Çad

1128

Bir dizenin boş, boş veya tanımsız olup olmadığını kontrol etmek için kullanıyorum:

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

Bir dizenin boş, boş veya tanımsız olup olmadığını kontrol etmek için 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());
};

21
neden str.length === 0 yerine 0 === str.length?
Vincent

66
@Vincent Koşulları genellikle bu şekilde yazılır if (variable == constant value)ve bir '=' unutursanız, test yerine değişkene sabit değer atarsınız . Bir if içinde değişken atayabileceğiniz için kod yine de çalışır. Dolayısıyla bu koşulu 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 sol taraf). Koşullardaki atamaya izin vermemek ve bir tane yazdığınızda uyarı almak için JSHint gibi bir şey de kullanabilirsiniz.
florian

2
/^\s*$/.test(str)gerçekten okunamayan utanç - belki daha basit kod veya regex kullanarak boşlukları kaldırmak daha iyi olurdu? bkz. stackoverflow.com/questions/6623231/… ve ayrıca stackoverflow.com/questions/10800355/…
Adrien Be

6
/^\s*$/.test(str) str.trim () ile değiştirilebilir. length === 0
Schadenfreude

21
@Vincent buna "Yoda Koşulları" da denir if blue is the sky. Bkz. Dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
AZ.

316

Önceki tüm cevaplar iyi, ama bu daha da iyi olacak. !!( Değil ) operatörünü kullanın .

if(!!str){
    // Some code here
}

Veya tip döküm kullanın:

if(Boolean(str)){
    // Code here
}

Her ikisi de aynı işlevi görür. Değişkeni Boolean olarak belirtin; burada strbir değişkentir.
Bu döner falseiçin null,undefined,0,000,"",false. "0" dizesi ve "" boşluk "için
geri döner true.


61
Neden bu "daha iyi"?
Mene

33
Davranışları arasında fark var mı if(str)ve if(!!str)?
Peter Olson

6
@PeterOlson bir değişkeni boolean olarak kaydetmeye çalışıyorsanız, içerik için birden fazla dizeyi kontrol eder, bunu yapmak istersiniz .. aka var any = (!!str1 && !!str2 && !!str3)orada da bir sayı varsa işleme
John Ruddell

23
Her zaman kullandığım çözüm bu. !!str.trim()dizenin yalnızca boşluklardan yapılmadığından emin olmak için.
Dario Oddenino

5
Bir kesmek gibi görünmüyor, Boolean(str)çok daha okunabilir ve daha az "wtfish" dir.
shinzou

105

Alabileceğiniz en yakın şey str.Empty(str'nin bir String olduğu ön koşuluyla):

if (!str.length) { ...

9
Bu bir istisna atmaz mıydı str null?
Pic Mickael

3
@PicMickael Evet! Öyle str.Empty.
Ateş Goral

99

Dize sadece bir sürü boş alan olmadığından emin olmanız gerekiyorsa (bunun form doğrulaması için olduğunu varsayıyorum) boşluklarda bir değişiklik yapmanız gerekir.

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

8
Ancak, aslında test etmek istediğiniz şey boşluk olmayan içeriğe sahip bir dize ise iş yapar. Bunu test etmenin daha ucuz bir yolu var mı?
flaş

4
Length özelliği hakkında nasıl?
Drian

27
Tüm alanları kaldırmak yerine, neden sadece boşluk olmadığını kontrol etmiyorsunuz? Boşluk olmayan bir karakter varsa erken kurtarma yapabileceği 2 avantajı vardır ve daha sonra kontrol ettiğiniz yeni bir dize döndürmez. if(str.match(/\S/g)){}
29'da mpen

34
@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

1
neden pahalı? Gerçekten ise, neden jQuery bu yöntemi kullanıyor? Bunu var trimLeft = /^\s+/, trimRight = /\s+$/;
jQuery'nin

66

Kullanırım:

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

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

5
Bu çözüm daha fazla dil bilincidir. Kullandığı tek JavaScript özelliği typeof'dir. Bu nedenle, farklı tarayıcılardaki uygulamalara güvenmediğinizde ve daha iyi bir çözüm elde etmek için zamanınız olmadığında kullanabileceğiniz bir çözümün iyi bir örneğidir. (IE, internet erişimi yok). Kanıt gibi bir şey. En temiz değil, ancak JavaScript hakkında çok şey bilmeden çalışacağından emin olabilirsiniz.
Jeff Davis

2
Ben biraz daha ileri gider ve tanımsız dava için bir === operatör ile çivi. Aksi takdirde sadece mükemmel bir cevaptır.
xarlymg89

typeofİçinde switchbenim için çalışmadı. Bir if (typeof e == "undefined")test ekledim ve işe yarıyor. Neden?
Lucas

1
@Lucas Çünkü bu bir yazım hatası veya bir gözetimdi. Değişikliğiniz doğru yaklaşımdır. (orijinal, işlevin kontrol etmesi gereken e parametresi değil, boş işlevin bağlamını ifade eder)
beeThree

case undefined:Bunun yerine kullanabilir miyiz case typeof(e) == "undefined":?
Boris J.

43

Sen kullanabilirsiniz lodash : _.isEmpty (değer).

Bu gibi durumlarda bir sürü kapsar {}, '', null, undefined, vb

Ama her zaman döndürür trueiçin Numbertürüne JavaScript ilkel veri türleri gibi _.isEmpty(10)veya _.isEmpty(Number.MAX_VALUE)her ikisi getiriler true.


_.isEmpty(" "); // => false
Erich

1
@Erich Çünkü " "boş değil. _.isEmpty("");true değerini döndürür.
Moshii

1
oldukça doğru - ben burada bahsetti çünkü burada diğer cevapların birkaçı form doğrulama anlamına gelir ve bir dize sadece boşluk oluşursa kontrol ve bu tek lodash işlevi tek başına bu sorunu çözmez.
Erich

@Erich, şimdi anladım, bahsettiğiniz için teşekkürler.
Mart'ta Moshii

36

İşlev:

function is_empty(x)
{
    return (
        (typeof x == 'undefined')
                    ||
        (x == null)
                    ||
        (x == false)  //same as: !x
                    ||
        (x.length == 0)
                    ||
        (x == "")
                    ||
        (x.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(x))
                    ||
        (/^\s*$/.test(x))
    );
}

PS: JavaScript'te, sonra satır sonu kullanmayın return;


1
Her kontrolün ne yaptığını açıklama şansınız var mı? :)
Mart'ta DanV

2
-1 Farklı şeyleri test ediyorlar. Hepsini tek bir ififadeye koymak hiç mantıklı değil .
Bennett McElwee

1
typeof MyVariable == 'undefined', değişken başlangıçta null olarak bildirilmedikçe ve başlatılmadıkça, tanımlanmamış bir değere sahip başlatılmış bir değişken ile tanımlanmamış bir değişken arasında ayrım yapmaz. Length özelliğinin denetlenmesi, dize ilkel öğesinin bir dize nesnesine sarılmasına neden olur.
Scott Marcus

35

Deneyin:

if (str && str.trim().length) {  
    //...
}

2
Length özelliği gerekli mi?
frogcoder

str.trim().lengthstr.trim()kendi test sonucuma göre yaklaşık% 1 daha hızlı yapacağım .
devildelta

2
@devildelta -% 1'iniz testinizde bir hata.
Stephen M Irving

OP, boş dize, tanımsız veya null olup olmadığını sınamak istiyor. Bu, bu koşullardan herhangi biri olmayan bir dizeyi test ediyor. Boşluk hakkında da hiçbir şey söylemedi. Değişkende başka hiçbir veri türünün depolanmadığından emin olduğunuz sürece OP'nin koşullarını sadece bu şekilde test edebilirsiniz: if (!str) { ... }
Stephen M Irving

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

JavaScript'te boş bir dizeyi temsil eden hiçbir şey yoktur. Ya karşı length(var değişkeninin her zaman bir dize olacağını biliyorsanız) ya da""


29

En verimli yöntem için fazla endişelenmezdim . Niyetinize en açık olanı kullanın. Benim için genellikle strVar == "".

Gelen yorum gereğince Constantin strVar bazı bir tamsayı 0 değerini içeren yeterli olabilir, eğer o gerçekten bu niyeti açıklayan durumlardan biri olacaktır.


11
Kötü bir fikir. StrVar yanlışlıkla 0 atandığında gerçekleşirsiniz.
Constantin

5
Niyetinizi netleştirmenin, diğer yöntemlerin sağlayabileceği tüm mikro optimizasyonlardan daha önemli olduğunu kabul ediyorum, ancak katı karşılaştırma operatörünün === kullanılması daha iyi olacaktır. Yalnızca strVarboş bir dize olduğunda true değerini döndürür .
Yararsız Kod

Tanımsızsa kontrol başarısız olur. Eğer (str) daha iyi çalışırsa
Valentin Heinitz

3
@ValentinHeinitz str'ye 0 veya "0" olarak bir falsey değeri atandıysa, (str) yanlış olarak doğru bildirirse. En iyi yaklaşım şudur (str === ""). Çok basit ve asla başarısız olmayacak.
Scott Marcus


20

Bir sürü cevap ve birçok farklı olasılık!

Hızlı ve basit bir uygulama için şüphesiz kazanan: if (!str.length) {...}

Ancak, diğer birçok örnek de mevcuttur. Bu konuda gitmek için en iyi fonksiyonel yöntem, ben öneririm:

function empty(str)
{
    if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
    {
        return true;
    }
    else
    {
        return false;
    }
}

Biraz fazla, biliyorum.


2
Tanımlanmamışların kontrolünün ilk olarak çeklerde taşınması gerekir, aksi takdirde tanımlanmamış öğeler önceki kontrollerde istisnalar atar.
SvdSinner

Kesinlikle katılmak! GÜZEL YAKALAYIŞ. Yukarıdaki cevabımı düzenleyeceğim!
16'da tfont

str.length === 0biçimsel parametreleri olmayan herhangi bir işlev için true değerini döndürür.
RobG

20

Ayrıca düzenli ifadelerle de gidebilirsiniz:

if((/^\s*$/).test(str)) { }

Boş veya boşlukla doldurulmuş dizeleri kontrol eder.


Çalışıyor, ama aynı zamanda korkunç pahalı ops-wise. Büyük bir seti değil, sadece bir veya iki şeyi kontrol etmek istiyorsanız iyi.
Orpheus

20

Verim

Seçilen 18 çözüm için macOS v10.13.6 (High Sierra) üzerinde testler yapıyorum . Çözümler, aşağıdaki kod parçasında sunulan biraz farklı (köşe kutusu giriş verileri için) çalışır.

Sonuçlar

  • basit çözeltiler göre !str, ==, ===ve lengthbütün tarayıcılar için hızlı (A, B, C, G, I, J)
  • çözümler normal ifadeye ( test, replace) dayalıdır ve charAttüm tarayıcılar için en yavaştır (H, L, M, P)
  • en hızlı olarak işaretlenmiş çözümler yalnızca bir test çalıştırması için en hızlıdır - ancak birçok çalışmada 'hızlı' çözümler grubunda değişir

Resim açıklamasını buraya girin

ayrıntılar

Aşağıdaki kod parçasında farklı giriş parametreleri kullanarak seçilen 18 yöntemin sonuçlarını karşılaştırıyorum

  • "" "a" " "- boş dize, harfli dize ve boşluklu dize
  • [] {} f- dizi, nesne ve işlev
  • 0 1 NaN Infinity - sayılar
  • true false - Boole
  • null undefined

Test edilen yöntemlerin tümü tüm giriş durumlarını desteklemez.

Ve sonra tüm yöntemler str = ""için Chrome v78.0.0, Safari v13.0.4 ve Firefox v71.0.0 tarayıcıları için hız testi davası gerçekleştiriyorum - burada makinenizde testler yapabilirsiniz

Resim açıklamasını buraya girin


Bu gerçekten harika! Tüm bunların ortaya konmasını görmeyi seviyorum! Teşekkür ederim!
WebWanderer

kapsamlı bir çalışma - teşekkürler
Deian

19
  1. var a;var olduğunu kontrol et
  2. ayarlayabilmek false spacesdeğeri, daha sonra testemptiness

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }

17

Ayrıca, boşlukla doldurulmuş bir dizeyi "boş" olarak değerlendirmeniz durumunda.

Bu normal ifade ile test edebilirsiniz:

!/\S/.test(string); // Returns true if blank.

14

Genellikle böyle bir şey kullanırım,

if (!str.length) {
    // Do something
}

3
Değişkenin bir dize olduğunu biliyorsanız en hızlısı. Değişken tanımsızsa bir hata atar.
Adrian Hope-Bailie

@ AdrianHope-Bailie neden tanımsız bir değişkeni test edesiniz?
Abimael Martell

2
@AbimaelMartell Neden olmasın? Bir yöntem veya API çağrısının yanıtında olduğu gibi, bildirdiğiniz veya bir kapsamdan size aktarılan bir değişkeniniz var. Bir değer içerdiğini varsayabilir ve yukarıdaki denetimi kullanabilirsiniz, ancak tanımlanmamışsa veya boşsa bir hata alırsınız. var testi = null; if (! test.length) {alert ("adrian is wrong");}
Adrian Hope-Bailie

OP "boş bir dizenin nasıl kontrol edileceğini" soruyordu, undefined değişkeni boş bir dize değil. Neyse typeof variable != "undefined"boş olup olmadığını kontrol etmeden önce kontrol edebilirsiniz.
Abimael Martell

10

Ben bir dize null karakter olasılığını dikkate alır bir cevap fark etmedim. Örneğin, bir boş karakter dizemiz varsa:

var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted

Geçersizliğini test etmek için böyle bir şey yapılabilir:

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

Boş bir dize ve boş bir dize üzerinde çalışır ve tüm dizeler için erişilebilir. Ek olarak, diğer JavaScript boş veya boşluk karakterlerini içerecek şekilde genişletilebilir (örn. Aralıksız alan, bayt sırası işareti, satır / paragraf ayırıcı, vb.).


2
İlginç analiz. Bunun vakaların% 99,9'unda geçerli olacağını düşünmüyorum. AMA yakın zamanda MySQL'in bir sütunu "null" olarak değerlendirdiğini (ve yalnızca bu sütun null karakteri içeriyorsa ("\ 0") buldum. Öte yandan Oracle, "\ 0" değerini null olarak değerlendirmez ve onu bir uzunluk dizesi (bu bir karakterin null karakter olduğu) olarak dizmeyi tercih eder. Birçok web geliştiricisi farklı "boş" değer türlerinden geçebilecek bir arka uç veritabanı ile çalıştığından, bu durum düzgün bir şekilde ele alınmazsa karışıklığa neden olabilir. Her geliştiricinin zihninin arkasında olmalı.
cartbeforehorse

10

Bu arada null, undefined, '', '', {}, [] gibi tüm 'boşalmaları' kontrol eden bir fonksiyona sahip olabiliriz . Bu yüzden yazdım.

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

Vakaları ve sonuçları kullanın.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false

10

Şu andan itibaren, bir dizenin boş olup olmadığını kontrol etmek için string.empty gibi doğrudan bir yöntem yoktur. Ancak kodunuzda, aşağıdaki gibi boş bir dize için bir sarıcı denetimi kullanabilirsiniz:

// considering the variable in which your string is saved is named str.

if (str && str.length>0) { 

  // Your code here which you want to run if the string is not empty.

}

Bunu kullanarak dizenin tanımsız veya boş olmadığından da emin olabilirsiniz. Unutmayın, tanımsız, boş ve boş üç farklı şeydir.


Null veya undefined için bir hata atar, çünkü null veya undefined olan bir değişken üzerinde doğrudan bir işlem yapmamalıyız - bunu diğer cevaplarda belirtildiği gibi yapmadan önce str olup olmadığını kontrol edin ve bunun abc üzerinde çalışacağını unutmayın = '' ama açık değil abc = '', bu ikisi farklı.
whoami

Düşünün let rand = ()=>Math.random(), sonra rand && rand.length > 0)yanlış döndürür, ancak açıkça fn "boş" değildir. Yani format parametresi olmayan herhangi bir fonksiyon için false değerini döndürür.
RobG

@RobG Math.random()bir dize değil bir sayı döndürür. Ve bu cevap iplerle ilgilidir. ;-)
Harshit Agarwal

10

Bütün bu cevaplar güzel.

Ancak değişkenin bir dize olduğundan, yalnızca boşluk içermediğinden (bu benim için önemlidir) ve '0' (dize) içerebileceğinden emin olamıyorum.

Benim versiyonum:

function empty(str){
    return !str || !/[^\s]+/.test(str);
}

empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty("  "); // true

Jsfiddle üzerinde örnek .


1
Ha? Eğer bir dize bekliyoruz, empty(0)ve empty(7)aynı değeri dönmelidir.
Bennett McElwee

Benim özel durumumda - empty("0")dönmelidir false(çünkü bu boş bir dize değildir), ama boş olduğu için empty(0)geri dönmelidir true:)
Andron

Ama 0 boş değil ! Bu bir sayıdır ve sayılar dolu veya boş olamaz. Tabii ki, bu sizin işlevinizdir ve bu nedenle gereksinimlerinizi karşılamalıdır, ancak emptybu durumda yanıltıcı bir isimdir.
Bennett McElwee

Bence bu isim emptyiyi. Boş işlev için php belgelerinde : ve bu işlev Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.arasındaki fark PHP- bu dize '0'boş olarak tanımlanmaz.
Andron

Dediğim gibi, bu senin fonksiyonun: istediğini söyle. Ancak emptyyanlış ve yanıltıcı bir isim. PHP'nin de kötü adlandırılmış bir emptyişlevi olması ilginçtir , ancak PHP'nin başarısızlıklarının JavaScript ile ilgisi yoktur.
Bennett McElwee

10

Burada iyi bir cevap görmedim (en azından benim için uygun bir cevap değil)

Bu yüzden kendime cevap vermeye karar verdim:

value === undefined || value === null || value === "";

Tanımsız olup olmadığını kontrol etmeye başlamanız gerekir. Aksi takdirde yönteminiz patlayabilir ve daha sonra null değerine veya boş bir dizeye eşit olup olmadığını kontrol edebilirsiniz.

Sahip olamaz !! ya da sadece if(value)kontrol edersen0 bu size yanlış cevap (0 false) vermek için gidiyor.

Bununla birlikte, şöyle bir yöntemle sarın:

public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }

PS .: Türünü kontrol etmenize gerek yok , çünkü yönteme girmeden önce bile patlayacak ve fırlayacaktı


Tanımsız ve null değerlere (ve ayrıca 0, -0, false, NaN) false olarak davranan Boolean (value) yapısını muhtemelen daha iyi kullanın. Bkz. Stackoverflow.com/questions/856324/…
Zhuravlev A.29

9

Birinin sadece boş değil, aynı zamanda boş dizeleri de algılaması gerekiyorsa, Goral'ın cevabına ekleyeceğim:

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}


8

JavaScript'te yerel String nesnesine kolayca ekleyebilir ve tekrar tekrar kullanabilirsiniz ... Aşağıdaki kod gibi basit bir şey, boş dizeleri kontrol etmek isterseniz işi sizin için yapabilir :
''

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

Aksi takdirde, hem ''boş dizeyi hem de ' 'boşlukla kontrol etmek isterseniz, bunu trim()aşağıdaki kod gibi bir şey ekleyerek yapabilirsiniz :

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

ve bu şekilde diyebilirsiniz:

''.isEmpty(); //return true
'alireza'.isEmpty(); //return false

!(!!this.length)Sadece !this(ya !this.trim()da ikinci seçenek için) yerine yapmanın ne yararı var ? Sıfır uzunluklu bir dizgi zaten yanlıştır, parantezler gereksizdir ve üç kez reddetmek, bir kez reddetmekle tamamen aynıdır.
John Montgomery

8

Bunu dene:

export const isEmpty = string => (!string || !string.length);

8

Bir dize olmayan ve boş olmayan / null değeri bir test işlevine geçirirseniz ne olacağı konusunda biraz araştırma yaptım. Birçok kişinin bildiği gibi, (0 == "") JavaScript'te doğrudur, ancak 0 bir değer olduğu ve boş veya boş olmadığı için, bunu test etmek isteyebilirsiniz.

Aşağıdaki iki işlev yalnızca tanımsız, boş, boş / boşluk değerleri için doğru, sayılar, Boole, nesneler, ifadeler vb. Gibi her şey için false değerini döndürür.

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

Daha karmaşık örnekler vardır, ancak bunlar basittir ve tutarlı sonuçlar verir. (Value == null) kontrolüne dahil edildiğinden, tanımsız olarak test edilmesine gerek yoktur. Ayrıca C # davranışını aşağıdaki gibi String'e ekleyerek taklit edebilirsiniz :

String.IsNullOrEmpty = function (value) { ... }

String sınıfı prototipine koymak istemezsiniz, çünkü String sınıfının örneği null olursa, hata verir:

String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error

Aşağıdaki değer dizisi ile test ettim. Şüphe duyuyorsanız, işlevlerinizi test etmek için bunu kullanabilirsiniz.

// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
    ['undefined', undefined],
    ['(var) z', z],
    ['null', null],
    ['empty', ''],
    ['space', ' '],
    ['tab', '\t'],
    ['newline', '\n'],
    ['carriage return', '\r'],
    ['"\\r\\n"', '\r\n'],
    ['"\\n\\r"', '\n\r'],
    ['" \\t \\n "', ' \t \n '],
    ['" txt \\t test \\n"', ' txt \t test \n'],
    ['"txt"', "txt"],
    ['"undefined"', 'undefined'],
    ['"null"', 'null'],
    ['"0"', '0'],
    ['"1"', '1'],
    ['"1.5"', '1.5'],
    ['"1,5"', '1,5'], // Valid number in some locales, not in JavaScript
    ['comma', ','],
    ['dot', '.'],
    ['".5"', '.5'],
    ['0', 0],
    ['0.0', 0.0],
    ['1', 1],
    ['1.5', 1.5],
    ['NaN', NaN],
    ['/\S/', /\S/],
    ['true', true],
    ['false', false],
    ['function, returns true', function () { return true; } ],
    ['function, returns false', function () { return false; } ],
    ['function, returns null', function () { return null; } ],
    ['function, returns string', function () { return "test"; } ],
    ['function, returns undefined', function () { } ],
    ['MyClass', MyClass],
    ['new MyClass', new MyClass()],
    ['empty object', {}],
    ['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
    ['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
    ['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];

== kullanmayı bırakırsanız ve === kullanırsanız, (s === "") sorunu çözer.
Scott Marcus

8

Tam olarak boş bir dize olup olmadığını kontrol etmek için:

if(val==="")...

Boş bir dize VEYA değersiz (null, undefined, 0, NaN, false, ...) için mantıksal bir eşdeğer olup olmadığını kontrol etmek için:

if(!val)...

7

Hiçbir isEmpty()yöntem yok , türü ve uzunluğu kontrol etmelisiniz:

if (typeof test === 'string' && test.length === 0){
  ...

Tip onay zaman çalışma zamanı hataları önlemek için gerekli olduğunu testolduğunu undefinedveya null.


7

Boşluk dizelerini yok sayarak, boş, boş ve tanımsız olup olmadığını kontrol etmek için bunu kullanabilirsiniz:

var obj = {};
(!!obj.str) // Returns false

obj.str = "";
(!!obj.str) // Returns false

obj.str = null;
(!!obj.str) // Returns false

Özlüdür ve en okunabilir olmasa da, tanımsız özellikler için çalışır.

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.