您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
一位不愿透露姓名的用户 发布于2022年01月15日 21:15 最近更新于 2022年01月15日 21:44

JS如何判断一个对象是空对象 isEmptyObject ?

2289 次浏览 读完需要≈ 1 分钟 JavaScript
如题。请问,在JavaScript中,如何判断一个对象是纯粹的空对象,也就是判断一个变量实际上是{}(或new Object())?

1 个回答

Ready · 2年前

方法一(不推荐)

最简单的实现方式(但是不推荐):

// 【不推荐】
function isEmptyObject(obj){
	return obj /* 快速检测 null 等非 truthy 值 */ && JSON.stringify(obj) == '{}';
}

但是,这种方法存在较为严重的性能问题,因此不推荐

方法二(适用于ES5+,推荐)

// 适用于 ES5+
function isEmptyObject(obj){
	return obj && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
}

方法三(适用于ES 5-)

// 适用于ES 5-
function isEmptyObject(obj) {
	if( !obj || obj.constructor !== Object ){
		return false;
	}
	for(var name in obj) {
		if(Object.prototype.hasOwnProperty.call(obj, name)) {
		  return false;
		}
	}
	return true;
}

方法四

该方法是 jQuery 库中jQuery.isEmptyObject( obj )方法的实现,其局部源代码如下:

// 【注意】该方法实际上并不能满足题干中的要求,放在这里仅供参考!
// 例如 $.isEmptyObject( new Date() ) 也会返回 true
// 例如 $.isEmptyObject( null ) 或 $.isEmptyObject() 也会返回 true
isEmptyObject: function( obj ) {
	var name;

	for ( name in obj ) {
		return false;
	}
	return true;
}
// 如果想利用此方法,可以参考【方法三】,对应加上其第一个 if 判断
已采纳 ? 0 0 0 编辑

撰写答案