先列一下之前在網上看到的解決辦法,然後再做分析:
方法一: 循環
function isEmptyObj(obj){
let o;
for(o in obj){
return false;
}
return true;
}
方法二:借用JSON對象序列表化
var o = {};
JSON.stringify(o) === '{}'//true
方法三:Jquery的isEmptyObject方法
var o = {};
$.isEmptyObject(o)//true
方法四:枚舉
var o = {};
Object.keys(o);//[]
通常情況下以上四種辦法基本可以解決問題,但是有一種特殊情況,上述四種方法均不適用,即通過Object的defineProperty方法爲obj定義屬性,並且描述符enumerable配爲false。
Object.defineProperty(o,'test',{enumerable:false});//此時test屬性是不可被枚舉的,因此以上四種方法均失效
在這種情況下,樓主想到的辦法是,使用Object.getOwnPropertyNames(obj)來獲取對象obj的屬性名稱,該方法返回一個數組,若數組的長度爲0,則obj此時爲{};以下是在瀏覽器上測試的結果: