空对象的呈现是var obj = {}
api
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; //第三种 return (Object.keys(obj).length === 0) }
第一种就是粗暴的直接转字符串,而后强行比较
第二种就是利用for in
的原理,而后一旦进了循环,说明有key
值,那就直接false
啦,不然就是空对象浏览器
下面测试一下两个方法的性能比较性能
0.012ms
左右0.007ms
左右,性能差距为两倍0.08ms
左右0.02ms
,平均耗时在0.0075ms
左右,性能差距随着对象越大,差距也会越大这种状况若是在平常使用的时候是能够使用第一种的,若是须要大数据交互中仅仅是某一个判断的话,仍是用第二种吧,毕竟涉及到循环,性能差距仍是很大的
既然用到了JSON.stringify,那么JSON.stringfy/parse如何使用呢,兼容性如何呢,如何本身实现一个呢测试