Ho visto questa domanda , ma non ho visto un esempio specifico di JavaScript. C'è un semplice string.Empty
disponibile in JavaScript o è solo un caso di verifica ""
?
Ho visto questa domanda , ma non ho visto un esempio specifico di JavaScript. C'è un semplice string.Empty
disponibile in JavaScript o è solo un caso di verifica ""
?
Risposte:
Se vuoi solo verificare se c'è qualche valore, puoi farlo
if (strValue) {
//do something
}
Se hai bisogno di controllare specificatamente una stringa vuota su null, penso che fare il check in ""
sia la tua scommessa migliore, usando l' ===
operatore (in modo da sapere che in realtà è una stringa con cui stai confrontando).
if (strValue === "") {
//...
}
=== ''
vs .length
non ha mostrato alcun miglioramento visibile (e l'utilizzo di .length
opere funziona solo se puoi supporre di avere una stringa)
Per verificare se una stringa è vuota, nulla o non definita, utilizzo:
function isEmpty(str) {
return (!str || 0 === str.length);
}
Per verificare se una stringa è vuota, nulla o non definita, utilizzo:
function isBlank(str) {
return (!str || /^\s*$/.test(str));
}
Per verificare se una stringa è vuota o contiene solo spazi bianchi:
String.prototype.isEmpty = function() {
return (this.length === 0 || !this.trim());
};
if (variable == constant value)
e se si dimentica un '=', si assegna il valore costante alla variabile invece di testare. Il codice continuerà a funzionare poiché puoi assegnare una variabile in un if. Quindi un modo più sicuro per scrivere questa condizione è invertire il valore costante e la variabile. In questo modo quando testerai il tuo codice vedrai un errore (lato mancino nell'assegnazione). Puoi anche usare qualcosa come JSHint per impedire l'assegnazione in condizioni ed essere avvisato quando ne scrivi una.
/^\s*$/.test(str)
non sia davvero leggibile - forse sarebbe meglio rimuovere gli spazi usando un codice più semplice o regex? vedi stackoverflow.com/questions/6623231/… e anche stackoverflow.com/questions/10800355/…
if blue is the sky
. Vedi dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
Tutte le risposte precedenti sono buone, ma sarà ancora meglio. Utilizzare l' operatore !!
( non ).
if(!!str){
// Some code here
}
Oppure usa il tipo casting:
if(Boolean(str)){
// Code here
}
Entrambi svolgono la stessa funzione. Digita la variabile in booleano, dove str
è una variabile.
Ritorna false
per null,undefined,0,000,"",false
.
Restituisce true
per la stringa "0" e lo spazio bianco "".
if(str)
e if(!!str)
?
var any = (!!str1 && !!str2 && !!str3)
gestione se c'è anche un numero lì dentro
!!str.trim()
per assicurarsi che la stringa non sia composta solo da spazi bianchi.
Boolean(str)
è molto più leggibile e meno "wtfish".
La cosa più vicina a cui puoi arrivare str.Empty
(con il presupposto che str sia una stringa) è:
if (!str.length) { ...
str.Empty
.
Se devi assicurarti che la stringa non sia solo un mucchio di spazi vuoti (suppongo che questo sia per la convalida del modulo) devi fare una sostituzione sugli spazi.
if(str.replace(/\s/g,"") == ""){
}
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Io uso:
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
nel switch
non ha funzionato per me. Ho aggiunto un if (typeof e == "undefined")
test e funziona. Perché?
case undefined:
posto di case typeof(e) == "undefined":
?
Puoi usare lodash : _.isEmpty (valore).
Esso copre un sacco di casi come {}
, ''
, null
,undefined
, etc.
Ma restituisce sempre true
per Number
tipi di dati di tipo primitivo JavaScript come _.isEmpty(10)
o _.isEmpty(Number.MAX_VALUE)
entrambi i ritorni true
.
_.isEmpty(" "); // => false
" "
non è vuoto. _.isEmpty("");
ritorna vero.
Funzione:
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: in JavaScript, non utilizzare l'interruzione di riga dopo return
;
if
frase.
Provare:
if (str && str.trim().length) {
//...
}
str.trim().length
farà più velocemente di str.trim()
circa l'1% secondo il mio risultato del test.
if (!str) { ... }
Non mi preoccuperei troppo del metodo più efficiente . Usa ciò che è più chiaro alla tua intenzione. Per me questo è di solitostrVar == ""
.
Secondo il commento di Constantin , se strVar potesse in qualche modo finire con contenere un valore intero 0, questa sarebbe davvero una di quelle situazioni che chiariscono l'intenzione.
===
sarebbe meglio. Restituisce vero solo se strVar
è una stringa vuota.
Molte risposte e molte possibilità diverse!
Senza dubbio per un'implementazione rapida e semplice il vincitore è: if (!str.length) {...}
Tuttavia, come molti altri esempi sono disponibili. Il miglior metodo funzionale per procedere, suggerirei:
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;
}
}
Un po 'eccessivo, lo so.
str.length === 0
restituisce vero per qualsiasi funzione che non ha parametri formali.
Potresti anche scegliere espressioni regolari:
if((/^\s*$/).test(str)) { }
Controlla le stringhe vuote o piene di spazi bianchi.
Eseguo test su macOS v10.13.6 (High Sierra) per 18 soluzioni scelte. Le soluzioni funzionano in modo leggermente diverso (per i dati di input in caso di angolo) che è stato presentato nel frammento di seguito.
conclusioni
!str
, ==
, ===
e length
sono veloci per tutti i browser (A, B, C, G, I, J)test
, replace
) e charAt
sono più lente per tutti i browser (H, L, M, P)Nel frammento di seguito comparo i risultati dei 18 metodi scelti usando diversi parametri di input
""
"a"
" "
- stringa vuota, stringa con lettera e stringa con spazio[]
{}
f
- array, oggetto e funzione0
1
NaN
Infinity
- numeritrue
false
- Booleanonull
undefined
Non tutti i metodi testati supportano tutti i casi di input.
E poi per tutti i metodi che str = ""
eseguo test di velocità per i browser Chrome v78.0.0, Safari v13.0.4 e Firefox v71.0.0 - puoi eseguire test sul tuo computer qui
var a;
esistanotagliare false spaces
il valore in, quindi provareemptiness
if ((a)&&(a.trim()!=''))
{
// if variable a is not empty do this
}
Di solito uso qualcosa del genere,
if (!str.length) {
// Do something
}
typeof variable != "undefined"
prima di verificare se è vuoto.
Non ho notato una risposta che tenga conto della possibilità di caratteri null in una stringa. Ad esempio, se abbiamo una stringa di caratteri null:
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
Per testarne la nullità si potrebbe fare qualcosa del genere:
String.prototype.isNull = function(){
return Boolean(this.match(/^[\0]*$/));
}
...
"\0".isNull() // true
Funziona su una stringa nulla e su una stringa vuota ed è accessibile per tutte le stringhe. Inoltre, potrebbe essere espanso per contenere altri caratteri vuoti o bianchi di JavaScript (ad es. Spazio non di rottura, segno di ordine byte, separatore di riga / paragrafo, ecc.).
Nel frattempo possiamo avere una funzione che controlla tutti gli "vuoti" come null, undefined, '', '', {}, [] . Quindi ho appena scritto questo.
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;
}
}
Usa casi e risultati.
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
A partire da ora non esiste un metodo diretto come string.empty per verificare se una stringa è vuota o meno. Ma nel tuo codice puoi usare un controllo wrapper per una stringa vuota come:
// 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.
}
Usando questo puoi anche assicurarti che la stringa non sia indefinita o anche nulla. Ricorda, indefinito, nullo e vuoto sono tre cose diverse.
let rand = ()=>Math.random()
, quindi rand && rand.length > 0)
restituisce false, ma chiaramente fn non è "vuoto". Vale a dire restituisce false per qualsiasi funzione che non ha parametri di formato.
Math.random()
restituisce un numero e non una stringa. E questa risposta riguarda le stringhe. ;-)
Tutte queste risposte sono carine.
Ma non posso essere sicuro che la variabile sia una stringa, non contenga solo spazi (questo è importante per me) e può contenere '0' (stringa).
La mia versione:
function empty(str){
return !str || !/[^\s]+/.test(str);
}
empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty(" "); // true
Esempio su jsfiddle .
empty(0)
e empty(7)
dovresti restituire lo stesso valore.
empty("0")
deve restituire false
(perché questa è una stringa non vuota), ma empty(0)
deve restituire true
perché è vuota :)
empty
in questo caso è un nome fuorviante.
empty
è un nome impreciso e fuorviante. È interessante notare che PHP ha anche una funzione mal denominata empty
, ma i suoi errori non hanno nulla a che fare con JavaScript.
Non ho visto una buona risposta qui (almeno non una risposta adatta a me)
Così ho deciso di rispondermi:
value === undefined || value === null || value === "";
Devi iniziare a verificare se non è definito. Altrimenti il tuo metodo può esplodere e quindi puoi verificare se è uguale a null o è uguale a una stringa vuota.
Non puoi avere !! o solo if(value)
dal momento che se controlli 0
ti darà una risposta falsa (0 è falso).
Detto questo, avvolgilo in un metodo come:
public static isEmpty(value: any): boolean {
return value === undefined || value === null || value === "";
}
PS .: Non è necessario controllare typeof , poiché esplode e si lancia anche prima che entri nel metodo
Prova questo
str.value.length == 0
"".value.length
causerà un errore. Dovrebbe esserestr.length === 0
TypeError
If str
è uguale undefined
onull
Puoi facilmente aggiungerlo all'oggetto String nativo in JavaScript e riutilizzarlo più e più volte ...
Qualcosa di semplice come il codice sottostante può fare il lavoro per te se vuoi controllare ''
stringhe vuote:
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.length);
}
Altrimenti, se desideri controllare sia la ''
stringa vuota che lo ' '
spazio, puoi farlo semplicemente aggiungendo trim()
qualcosa come il codice seguente:
String.prototype.isEmpty = String.prototype.isEmpty || function() {
return !(!!this.trim().length);
}
e puoi chiamarlo in questo modo:
''.isEmpty(); //return true
'alireza'.isEmpty(); //return false
!(!!this.length)
piuttosto che solo !this
(o !this.trim()
per la seconda opzione)? Una stringa di lunghezza zero è già falsa, le parentesi sono ridondanti e negarla tre volte è esattamente la stessa cosa che negarla una volta.
Ho fatto delle ricerche su cosa succede se si passa un valore non stringa e non vuoto / null a una funzione tester. Come molti sanno, (0 == "") è vero in JavaScript, ma poiché 0 è un valore e non è vuoto o nullo, potresti voler testarlo.
Le seguenti due funzioni restituiscono true solo per valori indefiniti, null, vuoti / bianchi e false per tutto il resto, come numeri, valori booleani, oggetti, espressioni, ecc.
function IsNullOrEmpty(value)
{
return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
return (value == null || !/\S/.test(value));
}
Esistono esempi più complicati, ma questi sono semplici e danno risultati coerenti. Non è necessario verificare se non definito, poiché è incluso nel controllo (valore == null). Puoi anche imitare il comportamento di C # aggiungendoli a String in questo modo:
String.IsNullOrEmpty = function (value) { ... }
Non si desidera inserirlo nel prototipo di Stringhe, poiché se l'istanza della classe String è nulla, si verificherà un errore:
String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error
Ho provato con il seguente array di valori. Puoi metterlo in loop per testare le tue funzioni in caso di dubbio.
// 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; } }]
];
Non esiste un isEmpty()
metodo, devi verificare il tipo e la lunghezza:
if (typeof test === 'string' && test.length === 0){
...
Il controllo del tipo è necessario per evitare errori di runtime quando test
è undefined
o null
.
Ignorando le stringhe di spazi bianchi, è possibile utilizzarlo per verificare la presenza di null, vuoti e indefiniti:
var obj = {};
(!!obj.str) // Returns false
obj.str = "";
(!!obj.str) // Returns false
obj.str = null;
(!!obj.str) // Returns false
È conciso e funziona con proprietà indefinite, sebbene non sia il più leggibile.