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 ""
?
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 ""
?
Antworten:
Wenn Sie nur überprüfen möchten, ob ein Wert vorhanden ist, können Sie dies tun
if (strValue) {
//do something
}
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).
if (strValue === "") {
//...
}
=== ''
vs .length
zeigte keine erkennbare Verbesserung (und die Verwendung .length
funktioniert nur, wenn Sie davon ausgehen können, dass Sie eine Zeichenfolge haben)
Um zu überprüfen, ob eine Zeichenfolge leer, null oder undefiniert ist, verwende ich:
function isEmpty(str) {
return (!str || 0 === str.length);
}
Um zu überprüfen, ob eine Zeichenfolge leer, null oder undefiniert ist, verwende ich:
function isBlank(str) {
return (!str || /^\s*$/.test(str));
}
So überprüfen Sie, ob eine Zeichenfolge leer ist oder nur Leerzeichen enthält:
String.prototype.isEmpty = function() {
return (this.length === 0 || !this.trim());
};
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.html
Alle vorherigen Antworten sind gut, aber das wird noch besser. Verwenden Sie den Operator !!
( nicht nicht ).
if(!!str){
// Some code here
}
Oder verwenden Sie Typ Casting:
if(Boolean(str)){
// Code here
}
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ür null,undefined,0,000,"",false
.
Es wird true
für die Zeichenfolge "0" und das Leerzeichen "" zurückgegeben.
if(str)
und if(!!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:
if (!str.length) { ...
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.
if(str.replace(/\s/g,"") == ""){
}
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Ich benutze:
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
typeof
in der switch
hat bei mir nicht funktioniert. Ich habe einen if (typeof e == "undefined")
Test hinzugefügt und das funktioniert. Warum?
case undefined:
statt verwenden case 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ür Number
Art von JavaScript primitiven Datentypen wie _.isEmpty(10)
oder _.isEmpty(Number.MAX_VALUE)
beide zurückkehren true
.
_.isEmpty(" "); // => false
" "
nicht leer ist. _.isEmpty("");
gibt true zurück.
Funktion:
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: Verwenden Sie in JavaScript keinen Zeilenumbruch danach return
.
if
Aussage zusammenzufassen.
Versuchen:
if (str && str.trim().length) {
//...
}
str.trim().length
wird str.trim()
nach meinem eigenen Testergebnis um etwa 1% schneller als .
if (!str) { ... }
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.
===
wäre besser. Es wird nur true zurückgegeben, wenn strVar
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:
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;
}
}
Ein bisschen übertrieben, ich weiß.
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:
if((/^\s*$/).test(str)) { }
Sucht nach Zeichenfolgen, die entweder leer oder mit Leerzeichen gefüllt sind.
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
, ==
, ===
und length
ist schnell für alle Browser (A, B, C, G, I, J)test
, replace
) und charAt
sind für alle Browser am langsamsten (H, L, M, P).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.
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 hier
var a;
vorhandenSchneiden Sie false spaces
den Wert aus und testen Sie ihn aufemptiness
if ((a)&&(a.trim()!=''))
{
// if variable a is not empty do this
}
Ich benutze normalerweise so etwas,
if (!str.length) {
// Do something
}
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:
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
Um seine Nullheit zu testen, könnte man so etwas tun:
String.prototype.isNull = function(){
return Boolean(this.match(/^[\0]*$/));
}
...
"\0".isNull() // true
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.).
In der Zwischenzeit können wir eine Funktion haben, die nach allen 'Leergut' wie null, undefined, '', '', {}, [] sucht . Also habe ich das gerade geschrieben.
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
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.
// 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.
}
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.
let rand = ()=>Math.random()
, dann wird rand && 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:
function empty(str){
return !str || !/[^\s]+/.test(str);
}
empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty(" "); // true
Probe auf jsfiddle .
empty(0)
und empty(7)
denselben Wert zurückgeben sollten.
empty("0")
muss zurückkehren false
(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
aber ein ungenauer und irreführender Name. Es ist interessant, dass PHP auch eine schlecht benannte empty
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, wird 0
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
Versuche dies
str.value.length == 0
"".value.length
wird einen Fehler verursachen. Es sollte seinstr.length === 0
TypeError
If str
gleich undefined
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 :
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.length);
}
Wenn Sie andernfalls sowohl ''
leere Zeichenfolgen als auch ' '
Leerzeichen überprüfen möchten , können Sie dies tun, indem Sie einfach trim()
den folgenden Code hinzufügen :
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.trim().length);
}
und Sie können es so nennen:
''.isEmpty(); //return true
'alireza'.isEmpty(); //return false
!(!!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.
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.
function IsNullOrEmpty(value)
{
return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
return (value == null || !/\S/.test(value));
}
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:
String.IsNullOrEmpty = function (value) { ... }
Sie möchten es nicht in den Strings-Prototyp einfügen, da ein Fehler auftritt, wenn die Instanz der String-Klasse null ist:
String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error
Ich habe mit dem folgenden Wertearray getestet. Sie können es durchlaufen, um Ihre Funktionen im Zweifelsfall zu testen.
// 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; } }]
];
Es gibt keine isEmpty()
Methode, Sie müssen nach Typ und Länge suchen:
if (typeof test === 'string' && test.length === 0){
...
Die Typprüfung ist erforderlich , um Laufzeitfehler zu vermeiden , wenn test
ist undefined
oder null
.
Wenn Sie Leerzeichenfolgen ignorieren, können Sie damit nach null, leer und undefiniert suchen:
var obj = {};
(!!obj.str) // Returns false
obj.str = "";
(!!obj.str) // Returns false
obj.str = null;
(!!obj.str) // Returns false
Es ist prägnant und funktioniert für undefinierte Eigenschaften, obwohl es nicht am besten lesbar ist.