溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JS判斷空對(duì)象的方法有哪些

發(fā)布時(shí)間:2022-02-16 09:10:31 來(lái)源:億速云 閱讀:140 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下JS判斷空對(duì)象的方法有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

    Object.keys

    Object.keys()方法是以對(duì)象為參數(shù),返回一個(gè)包含該對(duì)象內(nèi)所匹配的屬性和方法的數(shù)組

      var obj = {
        name: "cxy",
        age: "19"
      }; 
      var objArray = Object.getOwnPropertyNames(obj);
      console.log(objArray)

    JS判斷空對(duì)象的方法有哪些

    可以看到objArray為返回值,且返回值為以對(duì)象內(nèi)的屬性為內(nèi)容的數(shù)組

    Object.getOwnPropertyNames

    Object.getOwnPropertyNames()方法同樣是也是以對(duì)象為參數(shù),返回一個(gè)包含該對(duì)象內(nèi)所匹配的屬性和方法的數(shù)組

    大家在這里會(huì)發(fā)出疑問(wèn),這兩個(gè)有啥區(qū)別?Object.getOwnPropertyNames()可以返回所有的屬性,而Object.keys()只能返回可枚舉屬性,誒?到這里大家又疑惑了可枚舉屬性又是個(gè)啥?不要著急,我來(lái)解釋一下什么叫可枚舉屬性

    可枚舉屬性

    可枚舉或者不可枚舉屬性是對(duì)象內(nèi)部通過(guò)可枚舉標(biāo)志enumerable來(lái)進(jìn)行區(qū)分的,在默認(rèn)情況下,我們obj.name = "cxy"為對(duì)象新增了一個(gè)屬性后,其可枚舉標(biāo)志enumerable為ture,而當(dāng)其值為false的時(shí)候它是不可枚舉的,當(dāng)我們對(duì)對(duì)象進(jìn)行for,Object.keys(),JSON.stringify()的時(shí)候不可枚舉屬性是找不出來(lái)的,我們可以理解為不可枚舉屬性是隱身

    現(xiàn)在我們拿上面的Object.getOwnPropertyNamesObject.keys()進(jìn)行實(shí)戰(zhàn)舉例,我們通過(guò)defineProperty來(lái)為對(duì)象添加age屬性,因?yàn)樵摲椒梢栽O(shè)置枚舉標(biāo)志,這里設(shè)置為false,可以看到下面兩個(gè)不同的返回結(jié)果

    var stuObj = {
        name: "cxy"
    }
    Object.defineProperty(stuObj, 'age', {
      value: "18",
      enumerable: false
    });
    console.log(Object.keys(stuObj))
    console.log(Object.getOwnPropertyNames(stuObj))

    JS判斷空對(duì)象的方法有哪些

    hasOwnProperty

    hasOwnProperty()是用來(lái)判斷某對(duì)象是否含有某屬性的,其參數(shù)為屬性名

      var stuObj = {
        name: "cxy"
      }
      console.log(stuObj.hasOwnProperty('name'))

    JS判斷空對(duì)象的方法有哪些

    但是這里要注意一個(gè)問(wèn)題就是,hasOwnProperty()判斷繼承屬性的時(shí)候會(huì)返回false,繼承屬性即對(duì)象從原型對(duì)象上繼承的屬性,比如說(shuō)toString

    盤(pán)點(diǎn)判空方法

    JSON.stringify判空

    這種方式是比較簡(jiǎn)單的了,使用JSON.stringify將對(duì)象轉(zhuǎn)換為字符串,再通過(guò)等于判斷即可得到對(duì)象是否為空的布爾值

    let obj = {
        name: "cxy"
    }
    console.log(JSON.stringify(obj) == '{}')

    for in判空

    使用for in的話可以當(dāng)觸發(fā)循環(huán)的時(shí)候返回false沒(méi)有觸發(fā)循環(huán)的時(shí)候代表對(duì)象為空返回ture

    let forNull = (items) => {
        for (let item in items) {
            return false
        }
        return true
    }

    Object.getOwnPropertyNames判空

    這里使用了上文提及的Object.getOwnPropertyNames,將返回的數(shù)組的length作為判斷依據(jù)。

    let stuArray = Object.getOwnPropertyNames(obj)
    console.log(stuArray.length === 0)

    Object.keys()判空

    和上個(gè)方法一樣,使用數(shù)組作為判斷依據(jù)

    let stuArray = Object.getOwnPropertyNames(obj)
    console.log(stuArray.length === 0)

    hasOwnProperty判空

    使用hasOwnProperty是使用for循環(huán)將元素進(jìn)行判斷如果含有則返回false說(shuō)明不為空,反之則為空

    let forNull = (items) => {
        for (let item in items) {
            if(items.hasOwnProperty(item)){
                return false
            }
        }
        return true
    }

    附將對(duì)象轉(zhuǎn)換為字符串進(jìn)行比較

    這種方法很不推薦,但也確實(shí)是最容易想到的,主要使用JSON.stringify()這個(gè)方法對(duì)對(duì)象進(jìn)行強(qiáng)轉(zhuǎn),貼出來(lái)僅供一看: 

    var a={};
    var b=new Object();
    console.log("對(duì)象字面量的比較結(jié)果:"+(JSON.stringify(a)=="{}"))
    console.log("構(gòu)造函數(shù)的比較結(jié)果:"+(JSON.stringify(b)=="{}"))

    以上是“JS判斷空對(duì)象的方法有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    js
    AI