JavaScript 中 如何判断一个对象是空对象

  1. 利用 for...in 判断

    function isEmptyObject(object) {
    	for (let key in object) {
    		return false;	// 能遍历,对象不为空
    	}
    	return true;
    }
    

    思路:利用for in 循环遍历对象和对象原型上的可枚举属性;
    缺点:只能遍历可枚举属性,若一个对象上只有不可枚举属性的话,会判断错误;

  2. 利用 Object.keys() 判断

    function isEmptyObject(object) {
    	return Object.keys(object).length === 0;
    }
    

    思路:Object.keys 能返回对象自身上所有可枚举属性的名称所构成的数组, 若数组长度为0,那就是一个空对象;
    缺点:for...in 判断一样,Object.keys 方法也只返回可枚举属性;

  3. 将对象转化为json字符串

    function isEmptyObject(object) {
    	return JSON.stringify(object) === "{}";
    }
    
  4. 利用 Object.getOwnPropertyNames() 判断

    function isEmptyObject(object) {
    	return Object.getOwnPropertyNames(object).length === 0;
    }
    

    思路: Object.getOwnPropertyNames 方法获取到对象中的属性名,存到一个数组中,返回数组对象,若数组长度为0,则是空对象;
    缺点: Object.getOwnPropertyNames 方法是 Object.keys 的改进,可获取到不可枚举属性,但该方法无法获取 Symbol 属性;

  5. 利用 Reflect.ownKeys() 判断

    function isEmptyObject(object) {
    	return Reflect.ownKeys(object).length === 0;
    }
    

    思路: Reflect.ownKeys 也可以返回对象自身属性名所构成的数组,该方法可以返回不可枚举属性以及 Symbol 属性;


[延伸知识点]
什么是可枚举属性,什么是不可枚举属性:
可枚举属性是指内部可枚举标志 (enumerable) 设置为 true 的属性,不可枚举属性即是 enumerablefalse;


js遍历对象方法区别总结:

方法 基本属性 原型链属性 不可枚举属性 symbol属性
for...in × ×
Object.keys() × × ×
Object.getOwnPropertyNames() × ×
Object.Object.getOwnPropertySymbols()() × ×
Reflect.ownKeys() ×
posted @ 2022-03-17 16:13  太轻描淡写了  阅读(467)  评论(0编辑  收藏  举报