判断对象是否为空最可靠的方法是Object.keys(obj).length === 0,需先检查obj不为null且为非数组的对象,其他方法如JSON.stringify或for...in存在性能或兼容性问题。
判断一个对象是否为空,核心是看它是否拥有可枚举的自身属性。最可靠、兼容性好且语义清晰的方式是使用 Object.keys(obj).length === 0。
这是最常用也最推荐的方法。它只返回对象自身的、可枚举的属性名数组,不包括原型链上的属性或不可枚举属性(如 constructor)。
{} 返回空数组 [],长度为 0{a: 1})返回非空数组,长度大于 0null 或 undefined 会报错,使用前建议先做类型检查实际开发中,变量可能尚未初始化或被设为 null,直接调用 Object.keys 会抛出错误。可以这样加固:
obj !== null && typeof obj === 'object' && Object.keys(obj).length === 0obj && typeof obj === 'object' && !Array.isArray(obj) && Object.keys(obj).length === 0(同时排除数组)有些方法看似可行,但存在边界问题:
立即学习“Java免费学习笔记(深入)”;
JSON.stringify(obj) === '{}':能工作,但性能较差,且对含有 undefined、函数、Symbol 属性的对象会丢失信息或报错for...in 循环 + hasOwnProperty:可行,但代码稍长,易漏掉 hasOwnProperty 判断导致误判原型属性Object.entries(obj).length === 0:效果同 Object.keys,ES2017+ 支持,语义更明确(键值对维度),但兼容性略低如果项目中多次用到,可封装为复用函数:
function isEmptyObject(obj) {