簡述Js中,判斷對象為空對象的幾種方式


1、空對象、空引用以及undefined三種概念的區別

  • 空對象:是對象,但它的值是指向沒有任何屬性的對象的引用, {}是指 不含任何屬性 的對象,當然對象屬性包括 字面值和函數
  • 空引用:obj=null 是指  變量值指向null變量  ,null是對象,但是空引用(不指向任何對象);
    var a = null;
    console.log(typeof null); //object  
    
    注意:null 參與數值運算時其值會自動轉換為 0
    console.log(null + 123);//123
    console.log(null * 123);//0
  • undefined:未定義,所以不是對象,本身被定義為“undefined”這一特殊類型,當然在js默認不賦值的情況下,一個變量為undefined.;
    var a;
    console.log(a); //undefined
    console.log(typeof a); //undefined
    
    注意:undefined參與任何數值計算時,其結果一定是NaN。NAN不等於任何數,包括自己,任何數加NAN都是NAN; NAN == NANA(false)
  • null 與 undefined的區別
     console.log(null == undefined);//true  ==只需要判斷值是否相等
    //ECMAScript認為undefined是從null派生出來的,所以把它們定義為相等的
     console.log(null === undefined);//false   ===需要判斷類型與值是否全部相等
     console.log(typeof null == typeof undefined);//false

2、判斷是否為空對象的幾種方式

  • .將Json對象轉化為json字符串,再判斷該字符串是否為"{}";
    var a = {};
    console.log(JSON.stringify(a) == "{}");//true    ===同樣為true
  • for in語法
    • 簡單遍歷
      var a = {};
      function isEmptyObj(obj) {
        for (var key in obj) {
          return false;
        }
        return true;
      }
      console.log(isEmptyObj(a));//true
    • 遍歷原型及自身上的可枚舉屬性,需要結合hasOwnProperty去除原型上的可枚舉屬性
      var a = {};
      function isEmptyObj(obj) {
        for (var key in obj) {
          if ({}.hasOwnProperty.call(obj, key)) return false;
        }
        return true;
      }
      console.log(isEmptyObj(a));//true
  • Object.getOwnPropertyNames()方法 ----- 返回不包括原型上的所有自身屬性(包括不可枚舉的屬性)
    var a = {};
    //獲取到對象中的屬性名,存到一個數組中,返回數組對象,我們可以通過判斷數組的length來判斷此對象是否為空
    //注意:此方法不兼容ie8,其余瀏覽器沒有測試
    console.log(Object.getOwnPropertyNames(a).length === 0);//true
  • 使用ES6的Object.keys()方法,與上述方法類似,返回值也是對象中屬性名組成的數組
    var a = {};
    console.log(Object.keys(a).length === 0);//true   返回不包括原型上的可枚舉屬性,即自身的可枚舉屬性
  • jquery的isEmptyObject方法
    var a = {};
    //此方法是jquery將(for in)進行封裝,使用時需要依賴jquery
    console.log($.isEmptyObject(a)); //true

3、遇到的問題

暫無

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM