空對象的呈現是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如何使用呢,兼容性如何呢,如何本身實現一個呢測試