天天看點

c判斷數組是否為空_判斷是否為空對象的幾種方法方法一:周遊方法二:keys 方法方法三:JSON 方法方法四:getOwnPropertyNames 方法

檢查一個數組為空很容易,直接調用 length 方法即可,那麼如何檢查一個對象是否為空呢 ?

c判斷數組是否為空_判斷是否為空對象的幾種方法方法一:周遊方法二:keys 方法方法三:JSON 方法方法四:getOwnPropertyNames 方法

我們先來看一個代碼:

let obj1 = { name: 'oli', child: { name: 'oliver' } } let obj2 = { [Symbol('name')]: 'alice' } let obj3 = Object.defineProperty({}, 'name', { value: 'alice', enumerable: false }) let obj4 = Object.create(null) // 我們需要一個函數,來判斷參數是否為空對象,效果如下:isEmpty(obj1) // false isEmpty(obj2) // false isEmpty(obj3) // false isEmpty(obj4) // true
           

檢視對象是否有 Symbol 屬性可以使用 getOwnPropertySymbols 方法。

方法一:周遊

for-in 周遊,并通過 hasOwnProperty 方法确認是否存在某個 key 這種方法不能夠周遊到 enumerable 為 false 的屬性

const isEmptyObj = object => { if (!!Object.getOwnPropertySymbols(object).length) { return false } for (const key in object) { if (object.hasOwnProperty(key)) { return false } } return true}
           

方法二:keys 方法

使用 Object 靜态方法 keys 然後判斷 length 即可,keys 傳回的是自身可枚舉屬性,是以同樣的不可周遊到 enumerable 為 false 的屬性

const isEmptyObj = object => { if (!!Object.getOwnPropertySymbols(object).length) { return false } if (Object.keys(object).length) { return false } return true}
           

方法三:JSON 方法

使用 JSON Stringify 方法将對象轉為字元串,與字元串 '{}' 對比,同樣該方法無法擷取到不可周遊屬性

const isEmptyObj = object => { if (!!Object.getOwnPropertySymbols(object).length) { return false } return JSON.stringify(object) === '{}'}
           

方法四:getOwnPropertyNames 方法

使用 Object 的 getOwnPropertyNames 方法,擷取所有屬性名,這樣就算是不可枚舉屬性依然能夠擷取到,算是比較 ok 的方法。

const isEmptyObj = object => { if (!!Object.getOwnPropertySymbols(object).length) { return false } if (!!Object.getOwnPropertyNames(object).length) { return false } return true}