Kutudan çıkmış jquery ile boş bir dizeyi test etmenin en iyi yolu nedir?


229

Kutudan çıktığı gibi boş bir dize, yani eklentiler olmadan test etmenin en iyi yolu nedir? Denedim bu .

Ama en azından kutudan çıkmadı. Yerleşik bir şey kullanmak güzel olurdu.

Tekrarlamak istemem

if (a == null || a=='')

her yerde bazı if (isempty(a)) mevcut olurdu.



Yanıtlar:


556
if (!a) {
  // is emtpy
}

Dizeler için beyaz alanı yok saymak için:

if (!a.trim()) {
    // is empty or whitespace
}

Eğer eski desteği (IE8-) için gerekiyorsa trim(), kullanımını $.trimveya polyfill .


10
@CoffeeAddict boş dize javascriptte yanlıştır, bu nedenle evet, a"" veya başka bir yanlış değeri (null, false, undefined, 0, NaN) ise ifade true olarak değerlendirilir .
David Hellsing

21
Dizeleri yalnızca boşlukla eşleştirmeniz gerekiyorsa, kullanmak iyi bir fikirdirif (!$.trim(a))
Ilari Kajaste

3
Deneyimlerime göre, bu testi çalıştırmak istediğiniz çoğu zaman boşluk testi de içermesini istersiniz. Bu her zamanki gibi olduğu için OP, cevabına @IlariKajaste
Bane

17
0 girdiğinizde kabul edilen cevap başarısız olur, ancak 1, 2, 3, 4 vb. İçin çalışır
Steven

5
if (!a.trim())Biraz tehlikeli değil mi? aTanımsız veya boşsa ne olur ?
Timo

27

Verdiğiniz bağlantı, tekrarlamaktan kaçınmaya çalıştığınız testten farklı bir şey deniyor gibi görünüyor.

if (a == null || a=='')

dizenin boş bir dize mi yoksa null olup olmadığını test eder. Dize tamamen boşluk içeriyorsa (veya boşsa) sınamalara bağladığınız makale.

Açıkladığınız testin yerine aşağıdakiler geçebilir:

if (!a)

Çünkü javascript'te boş bir dize ve null, her ikisi de boolean bağlamında false olarak değerlendirilir.


if(!a)4 boşluktan oluşan bir dize için başarısız olmaz mı? ``
KNU

@KNU Evet, ancak soru boş bir dize soruyor ve boşluklardan oluşan bir dize boş bir dize değil. Sorulan ve bağlantılı kodun ne yaptığı arasındaki fark hakkında ne yazdığımı görün
SpoonMeiser

Bu cevap yanlış. '0' değerini boş bir dize gibi ele alır.
John Henckel

@JohnHenckel: 0Boş bir dize gibi davranacak , ama etmeyecek "0". Demek istediğin bu mu? Bunun abir dize veya boş olduğunu bildiğiniz bir durumda kullanılması düşünülebilir , ancak evet. Dikkat edilmesi gereken bir şey.
SpoonMeiser

25

David'in cevabına dayanarak şahsen verilen bir nesneyi dize olup olmadığını kontrol etmek isterim. Aksi takdirde .trim(), var olmayan bir nesneyi çağırmak bir istisna atar:

function isEmpty(value) {
  return typeof value == 'string' && !value.trim() || typeof value == 'undefined' || value === null;
}

Kullanımı:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false

Ben textarea <br /> <p> </p> ile kontrol ve olması gerektiği gibi boş değil dedi
kreamik

5

JQuery ile verilerin boş bir dize olup olmadığını kontrol edin (ve boşlukları yok sayın):

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}

5

Null, undefined, '', '', {}, [] gibi tüm 'boşalmaları' kontrol etmek .

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

3
if(!my_string){ 
// stuff 
}

ve

if(my_string !== "")

null değerini kabul etmek, ancak boş reddetmek istiyorsanız

DÜZENLEME: woops, durumunuzun boş olup olmadığını unuttum


2

Bunu tarayıcı konsolunuzda veya bir node.js yanıtında çalıştırmayı deneyin.

var string = ' ';
string ? true : false;
//-> true

string = '';
string ? true : false;
//-> false

Bu nedenle, test için basit bir dallanma yapısı yeterli olacaktır.

if(string) {
    // string is not empty
}

1
"string? true: false" yerine "!! string" demek daha iyidir.
ス レ ッ ク ス

2

Sabit tip dizelerin yanı sıra sayıları da girebildiğiniz için, cevap aslında şöyle olmalıdır:

function isBlank(value) {
  return $.trim(value);
}

Böyle olmamalı mı? return !!$.trim(value);
wonsuc

-1

Bunu dene

if(!a || a.length === 0)

OP özellikle buna bir alternatif aradıklarını belirtti.
Wayne

-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}

Bir ise nullo zaman a.trim()başarısız olur. Bu şeyleri kontrol etmek için kötü bir emirdir. Ve siparişi değiştirirseniz, cevabınız daha önce önerilmeyen bir şey sağlamaz.
Mike Scotty
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.