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
Ouaip:
passwordNotEmpty = not not password
ou plus court:
passwordNotEmpty = !!password
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)
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
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.
Vous pouvez utiliser le coffeescript ou l'opération =
s = ''
s or= null
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"
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
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 :)
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é.
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
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