lodash isEmpty并且有方法与简单检查

时间:2017-04-05 13:47:17

标签: javascript reactjs lodash

我可以if(user) { //do something },但我看到有人用lodash做简单的检查。我已经阅读了lodash关于isEmpty的文档并且有方法,但无法弄明白为什么作者会这样做。

import { isEmpty } from 'lodash'; 

if(isEmpty(user)) { //omg why? }

2 个答案:

答案 0 :(得分:13)

if(user)将传递空的Object / Array,但它们是空的,应该被拒绝。

对于if(user)0这些完全有效的值,false也会失败。

使用isEmpty()将处理此类值。此外,它使代码更具可读性。

要注意的是,isEmpty(1)将返回true,因为1是变量而非数据结构,因此应返回true

这已在Docs中说明:

  

检查值是否为空对象,集合,映射或集合。

另据文档说明,

  

如果对象没有自己的可枚举字符串键控属性,则视为空。

因此,如果您有一个没有非可枚举属性的对象,则将其视为空。在下面的示例中,foo是对象o的一部分,可以使用o.foo访问,但由于其不可枚举,因此被视为空为偶数for..in会忽略它

var o = Object.create(null);

Object.defineProperty(o, "foo", {
  enumerable: false,
  value: "Hello World"
})
Object.defineProperty(o, "bar", {
  enumerable: false,
  value: "Testing 123"
});


console.log(o)
for (var k in o) {
  console.log(k)
}

console.log(o.foo)

console.log(_.isEmpty(o))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

注意:这并不意味着你应该为此目的使用lodash。您可以编写自己的isEmpty函数。

以下是我使用的东西:

对于以下情况,这将返回true:

  • {}[]""undefinednull,上述代码段中的对象(无可枚举属性)< / LI>
function isEmpty(value){
  return  value === undefined ||
          value === null ||
          (typeof value === "object" && Object.keys(value).length === 0) ||
          (typeof value === "string" && value.trim().length === 0)
}

答案 1 :(得分:0)

简单优雅的功能,用于检查值是否为空

for(String s: list) {
    list.add("something");
}
  

测试上述方法

对于以下所有情况,它均将返回“ true”

    function isEmpty(value) {
     const type = typeof val;
     if ((value !== null && type === 'object') || type === 'function') {
       const properties = Object.keys(value);
        if (properties.length === 0 || properties.size === 0) { 
          return true;
        } 
      } 
      return !value;
}