Il modo più semplice per verificare se la stringa è nulla o vuota


87

Ho questo codice che controlla la stringa vuota o nulla. Funziona in fase di test.

eitherStringEmpty= (email, password) ->
  emailEmpty = not email? or email is ''
  passwordEmpty = not password? or password is ''
  eitherEmpty = emailEmpty || passwordEmpty         

test1 = eitherStringEmpty "A", "B" # expect false
test2 = eitherStringEmpty "", "b" # expect true
test3 = eitherStringEmpty "", "" # expect true
alert "test1: #{test1} test2: #{test2} test3: #{test3}"

Quello che mi chiedo è se c'è un modo migliore di not email? or email is ''. Posso fare l'equivalente di C # string.IsNullOrEmpty(arg)in CoffeeScript con una singola chiamata? Potrei sempre definire una funzione per esso (come ho fatto) ma mi chiedo se c'è qualcosa nella lingua che mi manca.

Risposte:


118

Sì:

passwordNotEmpty = not not password

o più breve:

passwordNotEmpty = !!password

1
Questa è la più "javascript-y" delle due risposte. Soprattutto se usi la !!versione, che è un modo comune per trasmettere essenzialmente a booleano. Se è importante, questo è quasi certamente più veloce della definizione di una funzione come suggerito da Jeremy.
Aaron Dufour

Funzionano tutti, ma questo ha ottenuto il maggior numero di voti positivi. Mi piace stackoverflow.com/q/8127920/30946 per la leggibilità anche se.
jcollum

3
Non funziona per la stringa con tutti gli spazi ... quindi non funziona per lo spazio vuoto
Arkhitech

1
@ Architech blank non è la stessa cosa di vuoto, quindi funziona.
jcollum

2
Troppo "intelligente" per i miei gusti in termini di leggibilità; non credo che lo userò, ma un buon lavoro comunque
PandaWood

37

Non è del tutto equivalente, ma email?.lengthsarà vero solo se emailnon è nullo e ha una .lengthproprietà diversa da zero . Se si notimposta questo valore il risultato dovrebbe comportarsi come si desidera sia per le stringhe che per gli array.

Se emailè nullo non ha un .length, allora email?.lengthvaluterà a null, che è falso. Se ha un, .lengthquesto valore valuterà la sua lunghezza, che sarà falsa se è vuoto.

La tua funzione potrebbe essere implementata come:

eitherStringEmpty = (email, password) ->
  not (email?.length and password?.length)

1
@pyrotechnick La domanda non ha chiesto di distinguere gli array dalle stringhe. Chiedeva di distinguere valori nulli e stringhe vuote da stringhe non vuote. Il mio punto era che il codice poteva anche distinguere valori nulli e array vuoti da array non vuoti, ma questo andava oltre lo scopo della domanda.
Jeremy

Tuttavia, "eitherStringEmpty" è un nome errato per il metodo fornito.
pirotecnico

14

Questo è un caso in cui la "verità" torna utile. Non è nemmeno necessario definire una funzione per questo:

test1 = not (email and password)

Perché funziona?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false

1
Presumo che tu abbia già richiamato .trim()il valore come parte della tua logica di convalida. La risposta è più sulla sintassi CS.
Ricardo Tomasi

5
unless email? and email
  console.log 'email is undefined, null or ""'

Prima controlla se l'email non è undefined e non è nullo con l'operatore esistenziale, quindi se sai che esiste la and emailparte restituirà false solo se la stringa dell'email è vuota.



1

Se devi verificare che il contenuto sia una stringa, non un null e non un array, utilizza un semplice tipo di confronto:

 if typeof email isnt "string"

typeof email isnt "string"restituisce false per entrambi ''e'a'
jcollum

1

Ecco un jsfiddle che mostra un modo molto semplice per farlo.

Fondamentalmente fai semplicemente questo è javascript:

var email="oranste";
var password="i";

if(!(email && password)){
    alert("One or both not set");        
}
else{
    alert("Both set");   
}

In cofanetto:

email = "oranste"
password = "i"
unless email and password
  alert "One or both not set"
else
  alert "Both set"

Spero che questo aiuti qualcuno :)


1

Penso che il punto interrogativo sia il modo più semplice per chiamare una funzione su una cosa se la cosa esiste.

per esempio

car = {
  tires: 4,
  color: 'blue' 
}

vuoi ottenere il colore, ma solo se l'auto esiste ...

coffeescript:

 car?.color

si traduce in javascript:

if (car != null) {
  car.color;
}

si chiama operatore esistenziale http://coffeescript.org/documentation/docs/grammar.html#section-63


Una stringa vuota restituisce true per il controllo di esistenza.
jcollum

1

Sono abbastanza sicuro che la risposta di @thejh fosse abbastanza buona da controllare la stringa vuota MA, penso che spesso dobbiamo controllare che "Esiste?" e poi dobbiamo controllare 'È vuoto? include string, array e object '

Questo è il modo più breve per CoffeeScript di farlo.

tmp? and !!tmp and !!Object.keys(tmp).length

Se manteniamo questo ordine di domande, verrebbe verificato in base a questo ordine 1. esiste? 2. stringa non vuota? 3. oggetto non vuoto?

quindi non ci sono stati problemi per tutte le variabili anche nel caso in cui non esistessero.



0

Invece della risposta accettata passwordNotEmpty = !!passwordpuoi usare

passwordNotEmpty = if password then true else false

Dà lo stesso risultato (la differenza solo nella sintassi).

Nella prima colonna c'è un valore, nella seconda è il risultato di if value:

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.