我有这个代码检查空字符串或空字符串。它正在测试中。
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}"
我想知道的是,如果有比not email? or email is ''
更好的方法。我可以通过一次调用在CoffeeScript中执行相当于C#string.IsNullOrEmpty(arg)
的操作吗?我总是可以为它定义一个函数(就像我一样),但我想知道是否有一些我缺少的语言。
答案 0 :(得分:114)
烨:
passwordNotEmpty = not not password
或更短:
passwordNotEmpty = !!password
答案 1 :(得分:37)
它并非完全等效,但如果email?.length
为非null并且具有非零email
属性,.length
将只是真正的。如果你not
这个值,结果应该按照你想要的字符串和数组行为。
如果email
为null
或.length
,则email?.length
将评估为null
,这是假的。如果它确实有.length
那么这个值将计算为它的长度,如果它是空的,它将是假的。
您的功能可以实现为:
eitherStringEmpty = (email, password) ->
not (email?.length and password?.length)
答案 2 :(得分:14)
这是“真实性”派上用场的案例。您甚至不需要为此定义函数:
test1 = not (email and password)
为什么会这样?
'0' // true
'123abc' // true
'' // false
null // false
undefined // false
答案 3 :(得分:4)
unless email? and email
console.log 'email is undefined, null or ""'
首先检查电子邮件是否未定义且使用存在运算符不为null,如果您知道它存在,and email
部分将仅在电子邮件字符串为空时返回false。
答案 4 :(得分:2)
您可以使用coffeescript或= operation
s = ''
s or= null
答案 5 :(得分:1)
如果您需要检查内容是否为字符串,而不是null而不是数组,请使用简单的比较类型:
if typeof email isnt "string"
答案 6 :(得分:1)
这是一个jsfiddle,展示了一种非常简单的方法。
基本上你只是这样做是javascript:
var email="oranste";
var password="i";
if(!(email && password)){
alert("One or both not set");
}
else{
alert("Both set");
}
在coffescript中:
email = "oranste"
password = "i"
unless email and password
alert "One or both not set"
else
alert "Both set"
希望这有助于某人:)
答案 7 :(得分:1)
我认为问号是在事物存在时调用函数的最简单方法。
例如
car = {
tires: 4,
color: 'blue'
}
你想获得颜色,但只有汽车存在...
CoffeeScript的:
car?.color
转换为javascript:
if (car != null) {
car.color;
}
它被称为存在运算符http://coffeescript.org/documentation/docs/grammar.html#section-63
答案 8 :(得分:0)
基于this answer关于检查变量是否具有truthy
值,您只需要一行:
result = !email or !password
&安培;你可以在online Coffeescript console
上亲自尝试一下答案 9 :(得分:0)
您可以使用
代替接受的答案passwordNotEmpty = !!password
passwordNotEmpty = if password then true else false
它给出了相同的结果(仅在语法上有所区别)。
第一列是值,第二列是if value
的结果:
0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
答案 10 :(得分:0)
我很确定@thejh的答案足以检查空字符串BUT, 我想我们经常需要检查“它是否存在?”然后我们需要检查'它是空的吗?包括字符串,数组和对象'
这是CoffeeScript执行此操作的缩短方式。
tmp? and !!tmp and !!Object.keys(tmp).length
如果我们保留此问题顺序,则会通过此订单进行检查 它存在吗? 2.不是空字符串? 3.不是空物?
所以即使在不存在的情况下,所有变量都没有任何问题。