這篇文章帶給大家的內容是關於JavaScript如何檢查一個物件是否為空(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
檢查一個陣列為空很容易,直接呼叫length 方法即可,那麼如何檢查一個物件是否為空呢❓
這裡的空指的是對象沒有自有屬性
假設這裡有兩個對象,一個是obj 一個是anotherObj
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 }
簡化版:
const isEmptyObj = object => !Object.getOwnPropertySymbols(object).length && !Object.getOwnPropertyNames(object).length
【相關推薦:JavaScript影片教學】
以上是JavaScript如何檢查一個物件是否為空(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!