使用Lodash和Underscore,我可以知道某个对象是否为空。
const a = {};
我想理解的是为什么它不能将未定义其所有属性的对象识别为空。
示例:
const a = {
b: undefined,
c: undefined
};
这个问题不是lodash: check object is empty的重复:我不是在寻找一种方法来验证它是否具有未定义的属性为空,我想了解为什么即使具有未定义值的属性也不能为空对象
答案 0 :(得分:3)
您的对象a
不是为空,它具有2个定义的属性,b
和c
,其值为undefined
。
您在评论之一中说:
我完全理解,如果它具有属性,但是如果它具有属性 没有值,为什么不说该对象为空。
但事实是,这些属性没有“没有值”,它们的值是undefined
。 undefined
是一个非常有效的值,就像null
,""
(空字符串)和NaN
一样。
答案 1 :(得分:1)
您的问题在您链接的文档中得到了回答。 如果在对象上调用了函数,则它们会检查长度。如果length> 0,则不认为该对象为空。
const a = {
b: undefined,
c: undefined
};
console.log(Object.keys(a).length); // 2
下划线文档
如果可枚举对象不包含任何值(不包含可枚举的自身属性),则返回true。对于字符串和类似数组的对象,_.isEmpty检查length属性是否为0。
Lodash文档
检查value是否为空对象,集合,地图或集合。
如果对象没有自己的可枚举字符串键属性,则认为它们为空。
类似数组的值(例如参数对象,数组,缓冲区,字符串或类似jQuery的集合)如果长度为0,则视为空。类似地,如果映射和集合的大小为0,则视为空。
为此,请想象一个代表您对象的文件柜。尽管抽屉中可能没有任何物品,但实际上,橱柜本身仍包含三个抽屉。根据您使用_.isEmpty()
的上下文,这可能是重要信息,也可能不是重要信息。