使用underscore.js进行空值检查

16
var name = "someName";
if(name !=null) {
   // do something
}
  1. 我目前正在使用http://underscorejs.org/#isNull,如何使用underscore.js实现相同的功能?
  2. 在这样的函数中使用它是否会略微提高性能?
4个回答

26
在underscore中,您可以使用
if(!_.isNull(name)) {}

在纯JavaScript中,你应该使用

if(name !== null) {}

应避免使用宽松不等运算符!=,因为它会进行类型转换,undefined != null将返回false

使用普通的JavaScript略微更快,因为它不必调用一个函数,但这几乎是察觉不到的,也不应该是一个考虑因素。

就可读性而言,我没有明确的偏好,但对于如此简单的检查来说,调用库函数似乎有点过度且啰嗦。


1
在 underscore.js 中,您必须编写以下内容才能实现该功能。
var name = "someName";
if(!(_.isNull(name ))) {
   // do something
}

在 underscore.js 中,函数 isNull 的写法如下。
_.isNull = function(obj) {
    return obj === null;
  };

所以,您的代码中使用==和underscore.js中使用===的区别在于这一点。关于这种差异的更多细节,请参见此问题。

JavaScript比较中应该使用哪个等号运算符(== vs ===)?

顺便说一句,在这种简单的情况下,我建议编写自己的条件,而不是使用任何库。

var name = "someName";
if(name !== null)) {
   // do something
}

1
-1 只是提到了写 === null 的极端简单性。是的,我刚刚给查克·诺里斯投了反对票。 - Niet the Dark Absol
6
你一生中最大的错误 :D - Chuck Norris

0
if ((!(_.isUndefined(data)) || _.isEmpty(data))) {
//Valid Data 
}else {//Not Valid}

3
请详细说明你的回答。 - Shawn
嗨,肖恩如果我们需要在JSON数据/对象上执行某些操作,那么我们可以简单地使用下划线库并进行两个检查:isUndefined(data)必须为false,而且空数据也是有效的,因此我们只需放置条件以进行验证。如果(!(_.isUndefined(data))|| _.isEmpty(data)){ //Valid Data json data //TODO WORK } else { //Not Valid json result } - Ashutosh Soni

0

你的原始代码有缺陷,因为如果name是空字符串、false、数字0或任何其他假值,则在测试中它将被视为null

作为一般规则,调用任何函数都是应该尽可能避免的开销。在这种情况下,仅为了测试一个值是否为空而调用函数,当你可以非常容易地编写if( name === null)时,我认为这很愚蠢...


2
只针对那些将要访问这个问题的人,使用 == null 时,""、false 和 0 将不匹配 null,只有 undefined 和 null 才会匹配 null。另一方面,当检查 == false(或 !something)时,它也会匹配 null、undefined、0、""、"0" 和 "false"。 - XIU
1
@XIU 谢谢你。"0" == false 这个真是让我困扰了很久。这太糟糕了... - wchargin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接