web-dev-qa-db-fra.com

Meilleure façon de vérifier si la chaîne est nulle ou vide

J'ai ce code qui vérifie la chaîne vide ou nulle. Cela fonctionne dans les tests. 

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}"

Ce que je me demande, c'est s'il existe un meilleur moyen que not email? or email is ''. Puis-je faire l'équivalent de C # string.IsNullOrEmpty(arg) dans CoffeeScript avec un seul appel? Je pourrais toujours définir une fonction (comme je l'ai fait) mais je me demande s'il manque quelque chose dans la langue 

81
jcollum

Ouaip:

passwordNotEmpty = not not password

ou plus court:

passwordNotEmpty = !!password
114
thejh

Ce n'est pas tout à fait équivalent, mais email?.length ne sera vrai que si email est non nul et possède une propriété .length non nulle. Si vous not cette valeur, le résultat doit se comporter comme vous le souhaitez pour les chaînes et les tableaux.

Si email est null ou n'a pas .length, alors email?.length sera évalué à null, qui est falsey. S'il a un .length, cette valeur sera évaluée à sa longueur, qui sera falsey si elle est vide.

Votre fonction pourrait être implémentée comme:

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

C'est un cas où la "véracité" est utile. Vous n'avez même pas besoin de définir une fonction pour cela:

test1 = not (email and password)

Pourquoi ça marche?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false
14
Ricardo Tomasi
unless email? and email
  console.log 'email is undefined, null or ""'

Commencez par vérifier si le courrier électronique n’est pas non défini et non nul avec l’opérateur existentiel. Par conséquent, si vous savez qu’il existe, la partie and email renverra false si la chaîne de courrier électronique est vide.

4
cutemachine

Vous pouvez utiliser le coffeescript ou l'opération =

s = ''    
s or= null
2
Duane Fields

Si vous devez vérifier que le contenu est une chaîne, pas une valeur null ni un tableau, utilisez une comparaison typeof simple:

 if typeof email isnt "string"
1
Kevin Lamping

Je pense que le point d'interrogation est le moyen le plus simple d'appeler une fonction sur une chose si la chose existe.

par exemple

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

vous voulez obtenir la couleur, mais seulement si la voiture existe ... 

coffeescript:

 car?.color

se traduit en javascript:

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

on l'appelle l'opérateur existentiel http://coffeescript.org/documentation/docs/grammar.html#section-63

1
Blair Anderson

Voici un jsfiddle démontrant un moyen très simple de le faire.

Fondamentalement, vous faites simplement ceci est javascript:

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

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

En coffeescript:

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

J'espère que ça aide quelqu'un :)

1
Automatico

Je suis à peu près sûr que la réponse de @thejh était suffisante pour vérifier la chaîne vide MAIS, Je pense que nous devons souvent vérifier que "existe-t-il?" et ensuite nous devons vérifier 'Est-ce vide? inclure chaîne, tableau et objet '

C'est le moyen le plus rapide pour CoffeeScript de le faire.

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

Si nous gardons cet ordre de question, cela sera vérifié par cet ordre 1. Est-ce qu'il existe? 2. pas de chaîne vide? 3. objet non vide?

donc il n'y avait pas de problèmes pour toutes les variables même dans le cas de non existé.

0
jwjin

Basé sur cette réponse sur le fait de vérifier si une variable a une valeur truthy ou non, il vous suffit d’une ligne:

result = !email or !password

et vous pouvez l’essayer par vous-même sur cette console en ligne Coffeescript

0
AbdelHady

Au lieu de la réponse acceptée passwordNotEmpty = !!password, vous pouvez utiliser

passwordNotEmpty = if password then true else false

Cela donne le même résultat (la seule différence de syntaxe).

Dans la première colonne est une valeur, dans la seconde est le résultat de if value:

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
0
Evmorov