javascript - lodash isEmpty 并且有方法 vs 简单检查

标签 javascript reactjs lodash

我可以 if(user) {//do something } 但我看到人们使用 lodash 进行简单的检查。我已经阅读了 lodash 关于 isEmptyhas 方法的文档,但无法弄清楚为什么要使用这些方法。

import { isEmpty } from 'lodash'; 

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

最佳答案

if(user) 将通过空对象/数组,但它们是空的,应该被拒绝。

此外,if(user) 将因 0false 等完全有效的值而失败。

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

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

这已在 Docs 中说明:

Checks if value is an empty object, collection, map, or set.

同样根据文档,

Objects are considered empty if they have no own enumerable string keyed properties.

所以如果你有一个没有不可枚举属性的对象,它被认为是空的。在下面的示例中,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:

  • {}, [], "", 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)
}

关于javascript - lodash isEmpty 并且有方法 vs 简单检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43233102/

相关文章:

reactjs - 选择后聚焦文本输入

javascript - JS-洛达什;嵌套对象(父/子)到平面数组

javascript - 如何使用 Polymer dom-repeat 映射数组

JavaScript - 合并两个对象数组并根据属性值进行重复数据删除

javascript - 在 JavaScript 中检查字符串是否包含另一个子字符串的最快方法?

javascript - JQuery printThis 和 Style 属性

javascript - 在 ReactJS 中映射对象数组的问题

javascript - 创建路由器时,React Router Dom V6 加载器会触发

javascript - 如何在 JavaScript 中计算数组的总和

javascript - 使用纯 JavaScript 或 Lodash 进行 JSON 数组操作