js如何判斷一個對象{}是否爲空對象,沒有任何屬性

js如何判斷一個對象{}是否爲空對象,沒有任何屬性

前段時間用js寫了一個類似"AngularJS"用於數據綁定的東西,功能是比較簡單了,

通常應該傳進來的是一個ArrayList JSON對象數組,

但有時候通過AJAX方法調用返回的是一個JSON對象,而不是數組!

爲了兼容這種情況使用了以下代碼:

[javascript] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. if (typeof model.rows === "object" && !(model.rows instanceof Array)){  
  2.     model.rows = [model.rows];  
  3.   
  4. }  
這段代碼在後來使用過程中發現了一個Bug,就是當
[javascript] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. model.rows = {};  
時,依然把它當作一個有效的對象來處理,進行數據綁定,可想而知,所有數據都是空的。

解決方案:

那麼怎麼解決這個問題呢?

第一習慣首先是搜索一下,但得到的結果都是DOM相關的,差強人意!

這時想起之前寫過遍歷JS對象屬性的方法,這裏可以用上了!

代碼如下:

[javascript] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. if (typeof model.rows === "object" && !(model.rows instanceof Array)){  
  2.     var hasProp = false;  
  3.     for (var prop in model.rows){  
  4.         hasProp = true;  
  5.         break;  
  6.     }  
  7.     if (hasProp){  
  8.         model.rows = [model.rows];  
  9.     }else{  
  10.         throw "model.rows is empty object";  
  11.         return false;  
  12.     }  
  13. }  
代碼很簡單,就不寫註釋了。

jQuery中的實現方法

JavaScript判斷object/json 是否爲空,可以使用jQuery的isEmptyObject()方法。

此方法如下

[javascript] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. function isEmptyObject(e) {  
  2.     var t;  
  3.     for (t in e)  
  4.         return !1;  
  5.     return !0  
  6. }  
調用

[javascript] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. console.log($.isEmptyObject({"re": 2}));    //false  
  2.    
  3. console.log(isEmptyObject());           //true  
  4. console.log(isEmptyObject({}));         //true  
  5. console.log(isEmptyObject(null));       //true  
  6. console.log(isEmptyObject(23));         //true  
  7. console.log(isEmptyObject({"te": 2}));      //false  

結束語

jQuery的isEmptyObject()方法實現的代碼即簡單又簡潔,但最關鍵的是我們要理解原理。

發佈了21 篇原創文章 · 獲贊 6 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章