成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何檢查一個(gè)對象是否為空

mindwind / 3577人閱讀

摘要:簡化版如果有更好的方法歡迎留言請關(guān)注我的訂閱號,不定期推送有關(guān)的技術(shù)文章,只談技術(shù)不談八卦

?? 更多前端技術(shù)和知識點(diǎn),搜索訂閱號 JS 菌 訂閱

檢查一個(gè)數(shù)組為空很容易,直接調(diào)用 length 方法即可,那么如何檢查一個(gè)對象是否為空呢 ?

這里的空指的是對象沒有自有屬性

假設(shè)這里有兩個(gè)對象,一個(gè)是 obj 一個(gè)是 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)

// 我們需要一個(gè)函數(shù),判斷是否不含自有屬性

isEmpty(obj1) // false
isEmpty(obj2) // false
isEmpty(obj3) // false
isEmpty(obj4) // true
??想了半天查看對象是否有 Symbol 屬性只能使用 getOwnPropertySymbols 方法,如果還有更好的方法歡迎留言
方法一:遍歷

for-in 遍歷,并通過 hasOwnProperty 方法確認(rèn)是否存在某個(gè) 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 靜態(tài)方法 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 方法將對象轉(zhuǎn)為字符串,與字符串 "{}" 對比,同樣該方法無法獲取到不可遍歷屬性

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

如果有更好的方法歡迎留言

請關(guān)注我的訂閱號,不定期推送有關(guān) JS 的技術(shù)文章,只談技術(shù)不談八卦

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109321.html

相關(guān)文章

  • 《Java8實(shí)戰(zhàn)》-第十章筆記(用Optional取代null)

    摘要:是第一批在堆上分配記錄的類型語言之一。實(shí)際上,的這段話低估了過去五十年來數(shù)百萬程序員為修復(fù)空引用所耗費(fèi)的代價(jià)。很明顯,這種方式不具備擴(kuò)展性,同時(shí)還犧牲了代碼的可讀性。是目前程序開發(fā)中最典型的異常。完成這一任務(wù)有多種方法。 用Optional取代null 如果你作為Java程序員曾經(jīng)遭遇過NullPointerException,請舉起手。如果這是你最常遭遇的異常,請繼續(xù)舉手。非??上?,...

    flybywind 評論0 收藏0
  • 用 JavaScript 實(shí)現(xiàn)鏈表

    摘要:相反,雙向鏈表具有指向其前后元素的節(jié)點(diǎn)。另外,可以對鏈表進(jìn)行排序。這個(gè)實(shí)用程序方法用于打印鏈表中的節(jié)點(diǎn),僅用于調(diào)試目的。第行將更新為,這是從鏈表中彈出最后一個(gè)元素的行為。如果鏈表為空,則返回。 showImg(https://segmentfault.com/img/bVbsaI7?w=1600&h=228); 什么是鏈表 單鏈表是表示一系列節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),其中每個(gè)節(jié)點(diǎn)指向鏈表中的下一...

    appetizerio 評論0 收藏0
  • 徹底搞懂瀏覽器Event-loop

    摘要:檢查宏任務(wù)隊(duì)列,發(fā)現(xiàn)有的回調(diào)函數(shù)立即執(zhí)行回調(diào)函數(shù)輸出。接著遇到它的作用是在后將回調(diào)函數(shù)放到宏任務(wù)隊(duì)列中這個(gè)任務(wù)在再下一次的事件循環(huán)中執(zhí)行。 為什么會寫這篇博文呢? 前段時(shí)間,和頭條的小伙伴聊天問頭條面試前端會問哪些問題,他稱如果是他面試的話,event-loop肯定是要問的。那天聊了蠻多,event-loop算是給我留下了很深的印象,原因很簡單,因?yàn)橹拔覐奈瓷钊肓私膺^,如果是面試的時(shí)...

    source 評論0 收藏0
  • java十六大常用工具類

    摘要:一關(guān)閉一個(gè)流或者且不拋出異常。刪除文件或文件夾且不會拋出異常。此外,還支持等十格式化參數(shù),返回一個(gè)或者可用字符串把或者等轉(zhuǎn)換為十一加密,返回位加密加密加密加密,返回位十二是否為空根據(jù)條件篩選集合元素根據(jù)指定方法處理集合元素,類似的。 一. org.apache.commons.io.IOUtils closeQuietly 關(guān)閉一個(gè)IO流、socket、或者selector且不...

    joyqi 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<