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

Jen*_*Mok 4 javascript lodash reactjs

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

import { isEmpty } from 'lodash'; 

if(isEmpty(user)) { //omg why? }
Run Code Online (Sandbox Code Playgroud)

Raj*_*esh 14

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

if(user)将无法像值0false这是完全有效的值.

使用isEmpty()将照顾这些价值观.此外,它使代码更具可读性.

点要注意的是isEmpty(1)将返回true作为1是一个变量,而不是一个数据结构,因此应该返回true.

这已在Docs中说明:

检查value是否为空对象,集合,映射或集合.

另外根据文档,

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

因此,如果您有一个没有非可枚举属性的对象,则将其视为空.在下面的示例中,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))
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


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

以下是我使用的东西:

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

  • {},[],"",undefined,null,对象在上面的片段(没有枚举属性)
function isEmpty(value){
  return  value === undefined ||
          value === null ||
          (typeof value === "object" && Object.keys(value).length === 0) ||
          (typeof value === "string" && value.trim().length === 0)
}
Run Code Online (Sandbox Code Playgroud)

  • 传递 0 或 false 就可以了,为什么不呢? (2认同)

Raj*_*dda 5

简单而优雅的函数,用于检查值是否为空

    function isEmpty(value) {
     const type = typeof value;
     if ((value !== null && type === 'object') || type === 'function') {
       const props = Object.keys(value);
        if (props.length === 0 || props.size === 0) { 
          return true;
        } 
      } 
      return !value;
}
Run Code Online (Sandbox Code Playgroud)

测试上述方法

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

console.log(isEmtpy(null)) 
console.log(isEmtpy(0))
console.log(isEmtpy({}))
console.log(isEmtpy(new Set())
console.log(isEmtpy(Object.create(null))
console.log(isEmtpy(''))
console.log(isEmtpy(() => {}))
console.log(isEmtpy(() => [])
Run Code Online (Sandbox Code Playgroud)