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