空对象的呈现是var obj = {}
function IsEmptyObject(obj){ if(!obj || typeof obj != 'object' || Array.isArray(obj)){ return false; } //第一种 //测试性能段 /* console.time('first'); if(JSON.stringify(obj) === '{}'){ console.timeEnd ('first'); return true }else{ console.timeEnd ('first'); return false; } */ return (JSON.stringify(obj) === '{}') //第二种 console.time('second'); for(var key in obj){ console.timeEnd ('second'); return false } console.timeEnd ('second'); return true; }第一种就是粗暴的直接转字符串,然后强行比较 第二种就是利用for in的原理,然后一旦进了循环,说明有key值,那就直接false啦,否则就是空对象
下面测试一下两个方法的性能比较
第一种在a就是一个空对象的情况下,在Imac谷歌浏览器上平均耗时在0.012ms左右
第二种在a就是一个空对象的情况下,在Imac谷歌浏览器上平均耗时在0.007ms左右,性能差距为两倍
第一种在a是一个普通对象的情况下,豆瓣的api对象,在Imac谷歌浏览器上平均耗时在0.08ms左右
第二种在a是一个普通对象的情况下,豆瓣的api对象,在Imac谷歌浏览器上,第一次稍慢,0.02ms,平均耗时在0.0075ms左右,性能差距随着对象越大,差距也会越大