检查字符串是否为null或为空的最简单方法


87

我有这段代码检查空字符串或空字符串。它正在测试中。

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 ''。是否可以string.IsNullOrEmpty(arg)通过一次调用在CoffeeScript中完成C#的等效功能?我总是可以为它定义一个函数(就像我一样),但是我想知道语言中是否缺少某些内容。

Answers:


118

对:

passwordNotEmpty = not not password

或更短:

passwordNotEmpty = !!password

1
这是两个答案中较“ javascript-y”的一个。特别是如果您使用!!版本,则这是从本质上转换为布尔值的常用方法。如果重要的话,这几乎可以肯定比Jeremy建议的定义函数要快。
亚伦·杜福

他们都工作,但这一投票最多。我喜欢stackoverflow.com/q/8127920/30946,以提高可读性。
jcollum

3
对于所有空格的字符串,它都将失败...因此不适用于空白
Arkhitech,2014年

1
@Arkhitech的空白与空白不同,因此可以正常工作。
jcollum 2014年

2
我的可读性太“巧”了;别以为我会用它,但是虽然
做得

37

它不是完全等效的,但email?.length仅当email它为非null且具有非零.length属性时才是真实的。如果您使用not此值,则结果对于字符串和数组都应表现为所需的行为。

如果emailnull或不具有.lengthemail?.length则将计算为null,这是错误的。如果确实有一个.length值,则此值将求出其长度,如果为空,则为false。

您的功能可以实现为:

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

1
@pyrotechnick这个问题没有问到区分数组和字符串的问题。它询问有关区分空值和空字符串与非空字符串的问题。我的观点是,代码还可以将空值和空数组与非空数组区分开,但这超出了问题的范围。
杰里米(Jeremy)2012年

但是,“ twoStringEmpty”对于您提供的方法来说是不正确的名称。
pyrotechnick 2012年

14

这是“真实性”派上用场的情况。您甚至不需要为此定义一个函数:

test1 = not (email and password)

为什么行得通?

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

1
我假设您已经.trim()在验证逻辑中调用了该值。答案更多是关于CS语法。
里卡多·托马西

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

首先使用存在性运算符检查电子邮件是否未定义且不为null,然后如果知道电子邮件存在,则该and email部分仅在电子邮件字符串为空时才返回false。



1

如果需要检查内容是否为字符串,而不是null而不是数组,请使用简单的typeof比较:

 if typeof email isnt "string"

typeof email isnt "string"返回false两个'''a'
jcollum

1

这是一个jsfiddle,展示了一种非常简单的方法。

基本上,您只需执行以下操作即可:

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

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

在文字中:

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

希望这可以帮助某人:)



1

我很确定@thejh的回答足以检查空字符串BUT,我认为我们经常需要检查“它是否存在?” 然后我们需要检查“是否为空?包括字符串,数组和对象”

这是CoffeeScript执行此操作的捷径。

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

如果我们保留此问题顺序,则将由该顺序检查1.它是否存在?2.不是空字符串?3.不是空的物体?

因此,即使不存在,所有变量也没有任何问题。



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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.