Ich habe diese Frage gesehen , aber kein JavaScript-spezifisches Beispiel. Gibt es ein einfaches string.Empty
in JavaScript verfügbares oder ist es nur eine Frage der Suche ""
?
javascript
null
is-empty
casademora
quelle
quelle
Antworten:
Wenn Sie nur überprüfen möchten, ob ein Wert vorhanden ist, können Sie dies tun
Wenn Sie speziell nach einer leeren Zeichenfolge über Null suchen müssen, ist es meiner Meinung nach am
""
besten, mit dem===
Operator zu prüfen (damit Sie wissen, dass es sich tatsächlich um eine Zeichenfolge handelt, mit der Sie vergleichen).quelle
=== ''
vs.length
zeigte keine erkennbare Verbesserung (und die Verwendung.length
funktioniert nur, wenn Sie davon ausgehen können, dass Sie eine Zeichenfolge haben).length > 0
ist es tatsächlich viel schneller als im Vergleich zu einem String-Literal! Schauen Sie sich diese jsPerfUm zu überprüfen, ob eine Zeichenfolge leer, null oder undefiniert ist, verwende ich:
Um zu überprüfen, ob eine Zeichenfolge leer, null oder undefiniert ist, verwende ich:
So überprüfen Sie, ob eine Zeichenfolge leer ist oder nur Leerzeichen enthält:
quelle
if (variable == constant value)
Wenn Sie ein '=' vergessen, weisen Sie der Variablen den konstanten Wert zu, anstatt zu testen. Der Code funktioniert weiterhin, da Sie eine Variable in einem if zuweisen können. Eine sicherere Möglichkeit, diese Bedingung zu schreiben, besteht darin, den konstanten Wert und die Variable umzukehren. Auf diese Weise wird beim Testen Ihres Codes ein Fehler angezeigt (ungültige Lef-Hand-Seite bei der Zuweisung). Sie können auch so etwas wie JSHint verwenden, um die Zuweisung unter Bedingungen zu verbieten und gewarnt zu werden, wenn Sie eine schreiben./^\s*$/.test(str)
das nicht wirklich lesbar ist - vielleicht wäre es besser, Leerzeichen mit einfacherem Code oder Regex zu entfernen? siehe stackoverflow.com/questions/6623231/… und auch stackoverflow.com/questions/10800355/…if blue is the sky
. Siehe dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.htmlAlle vorherigen Antworten sind gut, aber das wird noch besser. Verwenden Sie den Operator
!!
( nicht nicht ).Oder verwenden Sie Typ Casting:
Beide haben die gleiche Funktion. Geben Sie die Variable in Boolean ein, wobei
str
es sich um eine Variable handelt.Es kehrt zurück
false
fürnull,undefined,0,000,"",false
.Es wird
true
für die Zeichenfolge "0" und das Leerzeichen "" zurückgegeben.quelle
if(str)
undif(!!str)
?var any = (!!str1 && !!str2 && !!str3)
Behandlung, wenn dort auch eine Nummer enthalten ist!!str.trim()
um sicherzustellen, dass die Zeichenfolge nicht nur aus Leerzeichen besteht.Boolean(str)
ist viel besser lesbar und weniger "wtfish".Das nächste, was Sie erreichen können
str.Empty
(unter der Voraussetzung, dass str ein String ist), ist:quelle
str.Empty
.Wenn Sie sicherstellen müssen, dass die Zeichenfolge nicht nur eine Reihe von Leerzeichen ist (ich gehe davon aus, dass dies zur Formularüberprüfung dient), müssen Sie die Leerzeichen ersetzen.
quelle
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Ich benutze:
quelle
typeof
in derswitch
hat bei mir nicht funktioniert. Ich habe einenif (typeof e == "undefined")
Test hinzugefügt und das funktioniert. Warum?case undefined:
statt verwendencase typeof(e) == "undefined":
?Sie können lodash verwenden : _.isEmpty (Wert).
Es umfasst eine Menge von Fällen wie
{}
,''
,null
,undefined
etc.Aber es gibt immer
true
fürNumber
Art von JavaScript primitiven Datentypen wie_.isEmpty(10)
oder_.isEmpty(Number.MAX_VALUE)
beide zurückkehrentrue
.quelle
_.isEmpty(" "); // => false
" "
nicht leer ist._.isEmpty("");
gibt true zurück.Funktion:
PS: Verwenden Sie in JavaScript keinen Zeilenumbruch danach
return
.quelle
if
Aussage zusammenzufassen.Versuchen:
quelle
str.trim().length
wirdstr.trim()
nach meinem eigenen Testergebnis um etwa 1% schneller als .if (!str) { ... }
In JavaScript gibt es nichts, was eine leere Zeichenfolge darstellt. Führen Sie eine Überprüfung gegen
length
(wenn Sie wissen, dass die Variable immer eine Zeichenfolge sein wird) oder gegen""
quelle
Ich würde mir keine Sorgen um die effizienteste Methode machen. Verwenden Sie das, was Ihrer Absicht am klarsten ist. Für mich ist das normalerweise
strVar == ""
.Laut dem Kommentar von Constantin wäre dies in der Tat eine dieser Situationen, in denen die Absicht geklärt werden könnte, wenn strVar einen ganzzahligen Wert von 0 enthalten könnte.
quelle
===
wäre besser. Es wird nur true zurückgegeben, wennstrVar
es sich um eine leere Zeichenfolge handelt.Viele Antworten und viele verschiedene Möglichkeiten!
Ohne Zweifel für eine schnelle und einfache Implementierung ist der Gewinner:
if (!str.length) {...}
Es sind jedoch ebenso viele andere Beispiele verfügbar. Die beste funktionale Methode, um dies zu erreichen, würde ich vorschlagen:
Ein bisschen übertrieben, ich weiß.
quelle
str.length === 0
Gibt true für jede Funktion zurück, die keine formalen Parameter hat.Sie können auch reguläre Ausdrücke verwenden:
Sucht nach Zeichenfolgen, die entweder leer oder mit Leerzeichen gefüllt sind.
quelle
Performance
Ich führe Tests unter macOS 10.13.6 (High Sierra) für 18 ausgewählte Lösungen durch. Die Lösungen funktionieren etwas anders (für Eckfall-Eingabedaten), die im folgenden Snippet dargestellt wurden.
Schlussfolgerungen
!str
,==
,===
undlength
ist schnell für alle Browser (A, B, C, G, I, J)test
,replace
) undcharAt
sind für alle Browser am langsamsten (H, L, M, P).Einzelheiten
Im folgenden Snippet vergleiche ich die Ergebnisse der ausgewählten 18 Methoden anhand verschiedener Eingabeparameter
""
"a"
" "
- leere Zeichenfolge, Zeichenfolge mit Buchstaben und Zeichenfolge mit Leerzeichen[]
{}
f
- Array, Objekt und Funktion0
1
NaN
Infinity
- Zahlentrue
false
- Boolescher Wertnull
undefined
Nicht alle getesteten Methoden unterstützen alle Eingabefälle.
Code-Snippet anzeigen
Und dann für alle Methoden , die ich Geschwindigkeit Testfall durchführen
str = ""
für Browser Chrome v78.0.0, Safari v13.0.4 und Firefox v71.0.0 - können Sie Tests auf Ihrem Rechner laufen hierquelle
var a;
vorhandenSchneiden Sie
false spaces
den Wert aus und testen Sie ihn aufemptiness
quelle
Für den Fall, dass Sie eine mit Leerzeichen gefüllte Zeichenfolge als "leer" betrachten.
Sie können es mit diesem regulären Ausdruck testen:
quelle
Ich benutze normalerweise so etwas,
quelle
typeof variable != "undefined"
bevor Sie überprüfen , ob es leer ist.Ich habe keine Antwort bemerkt, die die Möglichkeit von Nullzeichen in einer Zeichenfolge berücksichtigt. Wenn wir zum Beispiel eine Nullzeichenfolge haben:
Um seine Nullheit zu testen, könnte man so etwas tun:
Es funktioniert mit einer Nullzeichenfolge und einer leeren Zeichenfolge und ist für alle Zeichenfolgen zugänglich. Darüber hinaus könnte es erweitert werden, um andere leere JavaScript- oder Leerzeichen zu enthalten (z. B. nicht unterbrechendes Leerzeichen, Byte-Ordnungszeichen, Zeilen- / Absatztrennzeichen usw.).
quelle
In der Zwischenzeit können wir eine Funktion haben, die nach allen 'Leergut' wie null, undefined, '', '', {}, [] sucht . Also habe ich das gerade geschrieben.
Anwendungsfälle und Ergebnisse.
quelle
Derzeit gibt es keine direkte Methode wie string.empty, um zu überprüfen, ob ein String leer ist oder nicht. In Ihrem Code können Sie jedoch eine Wrapper-Prüfung für eine leere Zeichenfolge verwenden, z.
Auf diese Weise können Sie auch sicherstellen, dass die Zeichenfolge nicht undefiniert oder auch null ist. Denken Sie daran, undefiniert, null und leer sind drei verschiedene Dinge.
quelle
let rand = ()=>Math.random()
, dann wirdrand && rand.length > 0)
false zurückgegeben, aber fn ist eindeutig nicht "leer". Dh es gibt false für jede Funktion zurück, die keine Formatparameter hat.Math.random()
gibt eine Zahl und keine Zeichenfolge zurück. Und diese Antwort handelt von Strings. ;-)Alle diese Antworten sind nett.
Ich kann jedoch nicht sicher sein, ob die Variable eine Zeichenfolge ist, nicht nur Leerzeichen enthält (dies ist für mich wichtig) und auch '0' (Zeichenfolge) enthalten kann.
Meine Version:
Probe auf jsfiddle .
quelle
empty(0)
undempty(7)
denselben Wert zurückgeben sollten.empty("0")
muss zurückkehrenfalse
(weil das eine nicht leere Zeichenfolge ist),empty(0)
muss aber zurückkehren,true
weil es leer ist :)empty
in diesem Fall ein irreführender Name.empty
gut. In PHP-Dokumenten für leere Funktion:Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.
Der Unterschied zwischenPHP
und dieser Funktion - diese Zeichenfolge'0'
wird nicht als leer identifiziert.empty
aber ein ungenauer und irreführender Name. Es ist interessant, dass PHP auch eine schlecht benannteempty
Funktion hat, aber die Fehler von PHP haben nichts mit JavaScript zu tun.Ich habe hier keine gute Antwort gesehen (zumindest keine Antwort, die zu mir passt)
Also beschloss ich, mir selbst zu antworten:
value === undefined || value === null || value === "";
Sie müssen überprüfen, ob es undefiniert ist. Andernfalls kann Ihre Methode explodieren und Sie können überprüfen, ob sie gleich null oder gleich einer leeren Zeichenfolge ist.
Das kannst du nicht haben !! oder nur
if(value)
seitdem, wenn Sie überprüfen, wird0
es Ihnen eine falsche Antwort geben (0 ist falsch).Wenn dies gesagt ist, wickeln Sie es in eine Methode wie:
public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }
PS.: Sie müssen den Typ nicht überprüfen , da er explodieren und werfen würde, noch bevor er in die Methode eintritt
quelle
Wenn man nicht nur leere, sondern auch leere Zeichenfolgen erkennen muss, werde ich zu Gorals Antwort hinzufügen:
quelle
Versuche dies
quelle
"".value.length
wird einen Fehler verursachen. Es sollte seinstr.length === 0
TypeError
Ifstr
gleichundefined
odernull
Sie können es einfach zu einem nativen String- Objekt in JavaScript hinzufügen und es immer wieder verwenden ...
Etwas Einfaches wie der folgende Code kann die Arbeit für Sie erledigen, wenn Sie
''
leere Strings überprüfen möchten :Wenn Sie andernfalls sowohl
''
leere Zeichenfolgen als auch' '
Leerzeichen überprüfen möchten , können Sie dies tun, indem Sie einfachtrim()
den folgenden Code hinzufügen :und Sie können es so nennen:
quelle
!(!!this.length)
nicht nur!this
(oder!this.trim()
für die zweite Option) zu tun ? Eine Zeichenfolge mit der Länge Null ist bereits falsch, die Klammern sind redundant, und das dreimalige Negieren entspricht genau dem einmaligen Negieren.Versuche dies:
quelle
Ich habe einige Nachforschungen angestellt, was passiert, wenn Sie einer Testerfunktion einen Wert ohne Zeichenfolge und ohne Leerzeichen / Null übergeben. Wie viele wissen, ist (0 == "") in JavaScript wahr, aber da 0 ein Wert ist und nicht leer oder null, möchten Sie ihn möglicherweise testen.
Die folgenden zwei Funktionen geben true nur für undefinierte Werte, null, leere Werte / Leerzeichen und false für alles andere zurück, z. B. Zahlen, Boolesche Werte, Objekte, Ausdrücke usw.
Es gibt kompliziertere Beispiele, die jedoch einfach sind und konsistente Ergebnisse liefern. Es besteht keine Notwendigkeit, auf undefiniert zu testen, da es in der Prüfung (value == null) enthalten ist. Sie können das C # -Verhalten auch nachahmen, indem Sie sie wie folgt zu String hinzufügen:
Sie möchten es nicht in den Strings-Prototyp einfügen, da ein Fehler auftritt, wenn die Instanz der String-Klasse null ist:
Ich habe mit dem folgenden Wertearray getestet. Sie können es durchlaufen, um Ihre Funktionen im Zweifelsfall zu testen.
quelle
So überprüfen Sie, ob es sich genau um eine leere Zeichenfolge handelt:
So überprüfen Sie, ob es sich um eine leere Zeichenfolge ODER ein logisches Äquivalent für No-Value handelt (null, undefiniert, 0, NaN, false, ...):
quelle
Es gibt keine
isEmpty()
Methode, Sie müssen nach Typ und Länge suchen:Die Typprüfung ist erforderlich , um Laufzeitfehler zu vermeiden , wenn
test
istundefined
odernull
.quelle
Wenn Sie Leerzeichenfolgen ignorieren, können Sie damit nach null, leer und undefiniert suchen:
Es ist prägnant und funktioniert für undefinierte Eigenschaften, obwohl es nicht am besten lesbar ist.
quelle