我可以if(user) { //do something }
,但我看到有人用lodash做简单的检查。我已经阅读了lodash关于isEmpty的文档并且有方法,但无法弄明白为什么作者会这样做。
import { isEmpty } from 'lodash';
if(isEmpty(user)) { //omg why? }
答案 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:
{}
,[]
,""
,undefined
,null
,上述代码段中的对象(无可枚举属性)< / 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;
}