Was ist der beste Weg, um mit jquery-out-of-the-box auf eine leere Zeichenfolge zu testen?

228

Was ist der beste Weg, um mit jquery-out-of-the-box, dh ohne Plugins, auf eine leere Zeichenfolge zu testen? Ich habe versucht , diese .

Aber es hat zumindest nicht sofort funktioniert. Es wäre schön, etwas zu verwenden, das eingebaut ist.

Ich würde es nicht gerne wiederholen

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

überall, wenn einige if (isempty(a)) verfügbar wären.

Martin
quelle

Antworten:

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

So ignorieren Sie Leerzeichen für Zeichenfolgen:

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

Wenn Sie Legacy-Unterstützung (IE8-) für trim(), verwenden Sie $.trimoder eine Polyfüllung .

David Hellsing
quelle
10
@CoffeeAddict leere Zeichenfolge ist in Javascript falsch, also wird der Ausdruck als wahr ausgewertet, wenn a"" oder ein anderer falscher Wert (null, falsch, undefiniert, 0, NaN).
David Hellsing
21
Wenn Sie auch Zeichenfolgen nur mit Leerzeichen if (!$.trim(a))
abgleichen müssen
3
Nach meiner Erfahrung möchten Sie in den meisten Fällen, in denen Sie diesen Test ausführen möchten, auch Tests auf Leerzeichen durchführen. Da dies der übliche Fall ist, sollte OP in seine Antwort den Kommentar von @IlariKajaste
Bane
17
Die akzeptierte Antwort schlägt fehl, wenn Sie eine 0 eingeben, funktioniert jedoch für 1, 2, 3, 4 usw.
Steven
5
Ist das nicht if (!a.trim())ein bisschen gefährlich? Was ist, wenn aundefiniert oder null ist?
Timo
27

Der Link, den Sie angegeben haben, scheint etwas anderes zu versuchen als der Test, den Sie vermeiden möchten.

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

Testet, ob die Zeichenfolge eine leere Zeichenfolge oder null ist. Der Artikel, den Sie mit Tests verknüpft haben, testet, ob die Zeichenfolge vollständig aus Leerzeichen besteht (oder leer ist).

Der von Ihnen beschriebene Test kann ersetzt werden durch:

if (!a)

Da in Javascript eine leere Zeichenfolge und null in einem booleschen Kontext als falsch ausgewertet werden.

SpoonMeiser
quelle
if(!a)Wird es nicht für eine Zeichenfolge fehlschlagen, die beispielsweise aus 4 Leerzeichen besteht? ``
KNU
@KNU Ja, aber die Frage fragt nach einer leeren Zeichenfolge, und eine Zeichenfolge aus Leerzeichen ist keine leere Zeichenfolge. Sehen Sie, was ich über den Unterschied zwischen dem, was gefragt wurde, und dem, was der verknüpfte Code tut, geschrieben habe
SpoonMeiser
Diese Antwort ist falsch. Es behandelt '0' wie eine leere Zeichenfolge, was es nicht ist.
John Henckel
@ JohnHenckel: Es wird 0wie eine leere Zeichenfolge behandelt, aber nicht "0". Ich nehme an, das hast du gemeint? Es ist denkbar, dass dies in einer Situation verwendet wird, in der Sie wissen, dass aes sich entweder um eine Zeichenfolge oder um null handelt, aber ja. Etwas zu beachten.
SpoonMeiser
25

Basierend auf Davids Antwort möchte ich persönlich das gegebene Objekt zuerst überprüfen, ob es überhaupt eine Zeichenfolge ist. Andernfalls würde das Aufrufen .trim()eines nicht vorhandenen Objekts eine Ausnahme auslösen:

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

Verwendung:

isEmpty(undefined); // true
isEmpty(null); // true
isEmpty(''); // true
isEmpty('foo'); // false
isEmpty(1); // false
isEmpty(0); // false
Timo
quelle
Ich überprüfe mit <br /> <p> </ p> aus dem Textbereich und es sagte nicht leer, wie es sollte
kreamik
5

Überprüfen Sie mit jQuery, ob Daten eine leere Zeichenfolge sind (und ignorieren Sie Leerzeichen):

function isBlank( data ) {
    return ( $.trim(data).length == 0 );
}
Sjoerd Linders
quelle
5

Zum Überprüfen auf alle 'Leergut' wie null, undefiniert, '', '', {}, [] .

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;
    }
}

Anwendungsfälle und Ergebnisse.

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
Imran Ahmad
quelle
3
if(!my_string){ 
// stuff 
}

und

if(my_string !== "")

Wenn Sie null akzeptieren möchten, aber leer ablehnen möchten

EDIT: woops, vergessen Sie Ihren Zustand ist, wenn es leer ist

Greg
quelle
2

Versuchen Sie, dies in Ihrer Browserkonsole oder in einer node.js-Antwort auszuführen.

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

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

Daher reicht für den Test ein einfaches Verzweigungskonstrukt aus.

if(string) {
    // string is not empty
}
Harry Love
quelle
1
Es ist besser, "!! string" anstelle von "string? true: false" oder auch nur "string" zu sagen.
ス レ ッ ク ス
2

Da Sie auch Zahlen sowie Zeichenfolgen mit festem Typ eingeben können, sollte die Antwort tatsächlich lauten:

function isBlank(value) {
  return $.trim(value);
}
Steven
quelle
Sollte es nicht so sein? return !!$.trim(value);
Wonsuc
-1

Versuche dies

if(!a || a.length === 0)
Atif Aziz
quelle
Das OP erklärte ausdrücklich, dass es nach einer Alternative dazu suche.
Wayne
-4
if((a.trim()=="")||(a=="")||(a==null))
{
    //empty condition
}
else
{
    //working condition
}
Amarjeet Chaani
quelle
Wenn a ist nulldann a.trim()würde scheitern. Dies ist eine schlechte Reihenfolge, um Dinge zu überprüfen. Und wenn Sie die Reihenfolge ändern, enthält Ihre Antwort nichts, was zuvor nicht vorgeschlagen wurde.
Mike Scotty