我可以 if(user) {//do something }
但我看到人们使用 lodash 进行简单的检查。我已经阅读了 lodash 关于 isEmpty
和 has
方法的文档,但无法弄清楚为什么要使用这些方法。
import { isEmpty } from 'lodash';
if(isEmpty(user)) { //omg why? }
最佳答案
if(user)
将通过空对象/数组,但它们是空的,应该被拒绝。
此外,if(user)
将因 0
或 false
等完全有效的值而失败。
使用 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/