判斷對象是否爲空(判斷對象是否有某個屬性)

js判斷對象爲空的方法❓

  • 將對象通過 JSON.stringify轉爲字符串,再判斷字符串是否等於 " {} "

    var obj = {};
    
    var isEmpty = (JSON.stringify(obj) == "{}");
    
    console.log(isEmpty);   //true
    
  • for in循環,判斷key是否存在

    var obj = {};
    
    var data = function() {
    	for(var key in obj) {
    		return false;
    	}
    	return true;
    }
    console.log(data());   //true
    
  • jquery的isEmptyObject()

    此方法是jquery將for in進行封裝,使用時需要依賴jquery。

    var obj = {};
    
    var isEmpty = $.isEmptyObject(obj);
    
    console.log(isEmpty);     //true
    
  • Object.getOwnPropertyNames()

    此方法是使用Object對象的getOwnPropertyNames方法,獲取到對象中的屬性名,存到一個數組中,返回數組對象,我們可以通過判斷數組的length來判斷此對象是否爲空。

    var obj = {};
    
    var arr = Object.getOwnPropertyNames(obj);
    console.log(arr);
    
    if(arr.length === 0){
    	console.log('是空對象哦!');
    }
    

    在這裏插入圖片描述

Es6中是如何解決的呢❓

es6針對對象增加了3個新方法:

  • Object.keys:返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷屬性的鍵名

  • Object.values:返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷屬性的鍵值

  • Object.entries:返回一個數組,成員是參數對象自身的(不含繼承的)所有可遍歷屬性的鍵值對

我們可以通過其中任意一個方法,得到返回的數組,判斷數組長度是否大於0,來判斷對象是否爲空

🌰:

const obj1 = {
   name: 'Anna',
   age: 22
 }
 console.log(Object.keys(obj1));    // ["name", "age"]
 console.log(Object.keys(obj1).length); // 2  (打印返回值的長度)

 console.log(Object.values(obj1));  //["Anna", 22]
 

 console.log(Object.entries(obj1));  //[["name", "Anna"], ["age", 22]]


 const obj2 = {};
 console.log(Object.keys(obj2)); // [] 
 console.log(Object.keys(obj2).length); // 0

判斷對象中是否有某屬性

  • 點( . )或者方括號( [ ] )

    let obj = {
       name: 'Anna',
       age: 22
     }
    let isName=obj.name;
    let isName1=obj['name'];
    let isAddress=obj.address;
    console.log(isName);   //Anna
    console.log(isName1);  //Anna
    console.log(isAddress);   //undefined
    
    

    所以,我們可以根據 obj.x !== undefined的返回值來判斷obj是否有x屬性。

    缺點

    不能用在x的屬性值存在,但可能爲undefined的場景, in運算符可以解決這個問題。

  • in

    如果指定的屬性在指定的對象或其原型鏈中,則in 運算符返回true

    let obj = {
       name: 'Anna',
       age: 22
    }
     
    let isName = 'name' in obj;
    let isAddress = 'address' in obj;
    console.log(isName);   //true
    console.log(isAddress);  //false
    
    

    缺點

    無法區分自身和原型鏈上的屬性,在只需要判斷自身屬性是否存在時,這種方式就不適用了。這時需要hasOwnProperty()

  • hasOwnProperty()

    判斷對象中是否含有某個屬性名,返回一個布爾值:

    let obj={
        name:'Anna',
        age:23
    }
    let isName=obj.hasOwnProperty("name");
    let isAddress=obj.hasOwnProperty("address");
    console.log(isName);   //true
    console.log(isAddress);  //false
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章