{}
(或new Object()
)? {}
(或new Object()
)? 最简单的实现方式(但是不推荐):
// 【不推荐】
function isEmptyObject(obj){
return obj /* 快速检测 null 等非 truthy 值 */ && JSON.stringify(obj) == '{}';
}
但是,这种方法存在较为严重的性能问题,因此不推荐。
// 适用于 ES5+
function isEmptyObject(obj){
return obj && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
}
// 适用于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 判断