摘要:簡化版如果有更好的方法歡迎留言請關注我的訂閱號,不定期推送有關的技術文章,只談技術不談八卦
?? 更多前端技術和知識點,搜索訂閱號 JS 菌 訂閱
檢查一個數組為空很容易,直接調用 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
如果有更好的方法歡迎留言
請關注我的訂閱號,不定期推送有關 JS 的技術文章,只談技術不談八卦
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109321.html
摘要:是第一批在堆上分配記錄的類型語言之一。實際上,的這段話低估了過去五十年來數百萬程序員為修復空引用所耗費的代價。很明顯,這種方式不具備擴展性,同時還犧牲了代碼的可讀性。是目前程序開發中最典型的異常。完成這一任務有多種方法。 用Optional取代null 如果你作為Java程序員曾經遭遇過NullPointerException,請舉起手。如果這是你最常遭遇的異常,請繼續舉手。非常可惜,...
摘要:相反,雙向鏈表具有指向其前后元素的節點。另外,可以對鏈表進行排序。這個實用程序方法用于打印鏈表中的節點,僅用于調試目的。第行將更新為,這是從鏈表中彈出最后一個元素的行為。如果鏈表為空,則返回。 showImg(https://segmentfault.com/img/bVbsaI7?w=1600&h=228); 什么是鏈表 單鏈表是表示一系列節點的數據結構,其中每個節點指向鏈表中的下一...
摘要:檢查宏任務隊列,發現有的回調函數立即執行回調函數輸出。接著遇到它的作用是在后將回調函數放到宏任務隊列中這個任務在再下一次的事件循環中執行。 為什么會寫這篇博文呢? 前段時間,和頭條的小伙伴聊天問頭條面試前端會問哪些問題,他稱如果是他面試的話,event-loop肯定是要問的。那天聊了蠻多,event-loop算是給我留下了很深的印象,原因很簡單,因為之前我從未深入了解過,如果是面試的時...
摘要:一關閉一個流或者且不拋出異常。刪除文件或文件夾且不會拋出異常。此外,還支持等十格式化參數,返回一個或者可用字符串把或者等轉換為十一加密,返回位加密加密加密加密,返回位十二是否為空根據條件篩選集合元素根據指定方法處理集合元素,類似的。 一. org.apache.commons.io.IOUtils closeQuietly 關閉一個IO流、socket、或者selector且不...
閱讀 3042·2021-09-03 10:33
閱讀 1270·2019-08-30 15:53
閱讀 2618·2019-08-30 15:45
閱讀 3378·2019-08-30 14:11
閱讀 526·2019-08-30 13:55
閱讀 2581·2019-08-29 15:24
閱讀 1905·2019-08-26 18:26
閱讀 3558·2019-08-26 13:41