Ik zag deze vraag, maar ik heb geen JavaScript-specifiek voorbeeld gezien. Is er een eenvoudige string.Empty
beschikbaar in JavaScript, of is het gewoon een kwestie van controleren op ""
?
Antwoord 1, autoriteit 100%
Als u alleen wilt controleren of er enige waarde is, kunt u dat doen
if (strValue) {
//do something
}
Als u specifiek moet controleren op een lege tekenreeks boven null, denk ik dat controleren aan de hand van ""
uw beste gok is, met behulp van de ===
operator (zodat je weet dat het in feite een string is waarmee je vergelijkt).
if (strValue === "") {
//...
}
Antwoord 2, autoriteit 31%
Om te controleren of een string leeg, null of ongedefinieerd is, gebruik ik:
function isEmpty(str) {
return (!str || str.length === 0 );
}
Om te controleren of een string leeg, null of ongedefinieerd is, gebruik ik:
function isBlank(str) {
return (!str || /^\s*$/.test(str));
}
Om te controleren of een tekenreeks leeg is of alleen witruimte bevat:
String.prototype.isEmpty = function() {
return (this.length === 0 || !this.trim());
};
Antwoord 3, autoriteit 10%
Alle eerdere antwoorden zijn goed, maar dit wordt nog beter. Gebruik dubbele NOT-operators (!!
):
if (!!str) {
// Some code here
}
Of gebruik typecasting:
if (Boolean(str)) {
// Code here
}
Beiden hebben dezelfde functie. Typ de variabele naar Boolean, waarbij str
een variabele is.
Het retourneert false
voor null
, undefined
, 0
, 000
, ""
, false
.
Het retourneert true
voor string "0"
en witruimte " "
.
Antwoord 4, autoriteit 3%
Het dichtst bij str.Empty
(met de voorwaarde dat str een String is) is:
if (!str.length) { ...
Antwoord 5, autoriteit 3%
Als je ervoor moet zorgen dat de string niet alleen maar een stel lege spaties is (ik neem aan dat dit voor formuliervalidatie is), moet je de spaties vervangen.
if(str.replace(/\s/g,"") == ""){
}
Antwoord 6, autoriteit 2%
Ik gebruik:
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
Antwoord 7
Je kunt lodash gebruiken:
_.isEmpty(waarde).
Het dekt veel gevallen zoals {}
, ''
, null
, undefined
, etc.
Maar het retourneert altijd true
voor Number
type Primitieve JavaScript-gegevenstypen zoals _.isEmpty(10)
of _.isEmpty(Number.MAX_VALUE)
retourneren beide true
.
Antwoord 8
Prestaties
Ik voer tests uit op macOS v10.13.6 (High Sierra) voor 18 gekozen oplossingen. Oplossingen werken iets anders (voor invoergegevens voor hoekgevallen) die in het onderstaande fragment werden gepresenteerd.
Conclusies
- de eenvoudige oplossingen op basis van
!str
,==
,===
enlength
zijn snel voor alle browsers (A,B,C,G,I,J) - de oplossingen op basis van de reguliere expressie (
test
,replace
) encharAt
zijn het langzaamst voor alle browsers (H,L,M, P) - de oplossingen die als snelste waren gemarkeerd, waren slechts tijdens één testrun het snelst – maar in veel runs verandert dit binnen de ‘snelle’ oplossingengroep
Details
In het onderstaande fragment vergelijk ik de resultaten van 18 gekozen methoden door verschillende invoerparameters te gebruiken
""
"a"
" "
– lege tekenreeks, tekenreeks met letter en tekenreeks met spatie[]
{}
f
– array, object en functie0
1
NaN
Infinity
– cijferstrue
false
– Booleannull
undefined
Niet alle geteste methoden ondersteunen alle invoergevallen.
Antwoord 9
Zeer algemene “Alles-in-één”-functie (hoewel niet aanbevolen):
function is_empty(x)
{
return ( //don't put newline after return
(typeof x == 'undefined')
||
(x == null)
||
(x == false) //same as: !x
||
(x.length == 0)
||
(x == 0) // note this line, you might not need this.
||
(x == "")
||
(x.replace(/\s/g,"") == "")
||
(!/[^\s]/.test(x))
||
(/^\s*$/.test(x))
);
}
Ik raad het echter niet aan om dat te gebruiken, omdat je doelvariabele van een specifiek type moet zijn (d.w.z. tekenreeks, of numeriek, of object?), dus pas de controles toe die relatief zijn aan die variabele.
Antwoord 10
var s; // undefined
var s = ""; // ""
s.length // 0
Er is niets dat een lege tekenreeks in JavaScript vertegenwoordigt. Doe een controle tegen length
(als je weet dat de var altijd een string zal zijn) of tegen ""
Antwoord 11
Probeer:
if (str && str.trim().length) {
//...
}
Antwoord 12
Ik zou me niet al te veel zorgen maken over de meest efficiënte methode. Gebruik wat het meest duidelijk is voor uw bedoeling. Voor mij is dat meestal strVar == ""
.
Volgens de opmerking van Constantin, als strVar op de een of andere manier een geheel getal 0 zou kunnen bevatten, dan zou dat inderdaad een van die intentieverhelderende situaties zijn.
Antwoord 13
- controleer of
var a;
bestaat -
knip de
false spaces
in de waarde weg en test vervolgens opemptiness
if ((a)&&(a.trim()!='')) { // if variable a is not empty do this }
Antwoord 14
Je zou ook met reguliere expressies kunnen werken:
if((/^\s*$/).test(str)) { }
Controleert op tekenreeksen die leeg zijn of gevuld met witruimte.
Antwoord 15
Veel antwoorden en veel verschillende mogelijkheden!
Zonder twijfel voor een snelle en eenvoudige implementatie is de winnaar: if (!str.length) {...}
Er zijn echter net zoveel andere voorbeelden beschikbaar. De beste functionele methode om dit aan te pakken, zou ik willen voorstellen:
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;
}
Antwoord 16
Ook als u een met witruimte gevulde tekenreeks als “leeg” beschouwt.
Je kunt het testen met deze reguliere expressie:
!/\S/.test(string); // Returns true if blank.
Antwoord 17
Ik gebruik meestal zoiets als dit,
if (!str.length) {
// Do something
}
Antwoord 18
Als men niet alleen lege maar ook lege strings moet detecteren, zal ik aan Goral’s antwoord toevoegen:
function isEmpty(s){
return !s.length;
}
function isBlank(s){
return isEmpty(s.trim());
}
Antwoord 19
Vanaf:
return (!value || value == undefined || value == "" || value.length == 0);
Kijkend naar de laatste voorwaarde, als waarde == “”, moet de lengte moet 0 zijn. Laat het daarom vallen:
return (!value || value == undefined || value == "");
Maar wacht! In JavaScript is een lege tekenreeks onwaar. Laat daarom waarde vallen == “”:
return (!value || value == undefined);
En !undefined is waar, dus die controle is niet nodig. Dus we hebben:
return (!value);
En we hebben geen haakjes nodig:
return !value
Antwoord 20
Ik heb geen antwoord opgemerkt dat rekening houdt met de mogelijkheid van null-tekens in een string. Als we bijvoorbeeld een null-tekenreeks hebben:
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
Om de nietigheid te testen, zou je zoiets als dit kunnen doen:
String.prototype.isNull = function(){
return Boolean(this.match(/^[\0]*$/));
}
...
"\0".isNull() // true
Het werkt op een null-tekenreeks en op een lege tekenreeks en is toegankelijk voor alle tekenreeksen. Bovendien kan het worden uitgebreid om andere lege JavaScript-tekens of witruimtetekens te bevatten (d.w.z. vaste spatie, bytevolgordemarkering, lijn-/paragraafscheidingsteken, enz.).
Antwoord 21
Ondertussen kunnen we één functie hebben die controleert op alle ‘leegtes’ zoals null, undefined, ”, ‘ ‘, {}, [].
Dus ik heb dit zojuist geschreven.
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;
}
}
Gebruik cases en resultaten.
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
Antwoord 22
Vanaf nu is er geen directe methode zoals string.empty om te controleren of een string leeg is of niet. Maar in je code kun je een wrapper check gebruiken voor een lege string zoals:
// 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.
}
Hiermee kunt u er ook voor zorgen dat de tekenreeks niet ongedefinieerd of ook null is. Onthoud dat ongedefinieerd, null en leeg drie verschillende dingen zijn.
Antwoord 23
Ik heb hier geen goed antwoord gezien (althans geen antwoord dat bij mij past)
Dus besloot ik mezelf te antwoorden:
value === undefined || value === null || value === "";
Je moet beginnen met controleren of het niet gedefinieerd is. Anders kan je methode exploderen, en dan kun je controleren of deze gelijk is aan null of gelijk is aan een lege string.
Je kunt niet hebben !! of alleen if(value)
want als je 0
aanvinkt, krijg je een fout antwoord (0 is fout).
Dat gezegd hebbende, sluit het af in een methode zoals:
public static isEmpty(value: any): boolean {
return value === undefined || value === null || value === "";
}
PS.: Je hoeft typeof niet aan te vinken, omdat het zou exploderen en weggooien nog voordat het de methode binnengaat
Antwoord 24
Ik gebruik een combinatie en de snelste controles zijn eerst.
function isBlank(pString) {
if (!pString) {
return true;
}
// Checks for a non-white space character
// which I think [citation needed] is faster
// than removing all the whitespace and checking
// against an empty string
return !/[^\s]+/.test(pString);
}
Antwoord 25
Al deze antwoorden zijn leuk.
Maar ik weet niet zeker of die variabele een tekenreeks is, niet alleen spaties bevat (dit is belangrijk voor mij) en ‘0’ (tekenreeks) kan bevatten.
Mijn versie:
function empty(str){
return !str || !/[^\s]+/.test(str);
}
empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty(" "); // true
Voorbeeld op jsfiddle.
Antwoord 26
Ik heb wat onderzoek gedaan naar wat er gebeurt als je een niet-string en niet-lege/null-waarde doorgeeft aan een testerfunctie. Zoals velen weten, is (0 == “”) waar in JavaScript, maar aangezien 0 een waarde is en niet leeg of null, wil je er misschien op testen.
De volgende twee functies retourneren alleen true voor ongedefinieerde, null-, lege/witruimtewaarden en false voor al het andere, zoals getallen, Boolean, objecten, expressies, enz.
function IsNullOrEmpty(value)
{
return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
return (value == null || !/\S/.test(value));
}
Er zijn meer gecompliceerde voorbeelden, maar deze zijn eenvoudig en geven consistente resultaten. Het is niet nodig om te testen op undefined, omdat het is opgenomen in de (value == null) controle. Je kunt ook het gedrag van C# nabootsen door ze als volgt aan String toe te voegen:
String.IsNullOrEmpty = function (value) { ... }
Je wilt het niet in het Strings-prototype plaatsen, want als de instantie van de String-klasse null is, zal deze een foutmelding geven:
String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error
Ik heb getest met de volgende waardearray. Je kunt het doorlopen om je functies te testen als je twijfelt.
// 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; } }]
];
Antwoord 27
Om te controleren of het precies een lege string is:
if(val==="")...
Om te controleren of het een lege string is OF een logisch equivalent voor geen waarde (null, undefined, 0, NaN, false, …):
if(!val)...
Antwoord 28
Witruimte bijsnijden met de null-coalescerende operator:
if (!str?.trim()) {
// do something...
}
Antwoord 29
in het geval van het eenvoudig controleren van de lege string
if (str.length){
//do something
}
als u ook null & ongedefinieerd met uw cheque gewoon
if (Boolean(str)){
//this will be true when the str is not empty nor null nor undefined
}
Antwoord 30
Er is geen isEmpty()
methode, je moet het type en de lengte controleren:
if (typeof test === 'string' && test.length === 0){
...
De typecontrole is nodig om runtime-fouten te voorkomen wanneer test
undefined
of null
is.