最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS判斷空對(duì)象的幾個(gè)方法大盤點(diǎn)

 更新時(shí)間:2022年02月15日 16:06:18   作者:豬痞惡霸  
在做數(shù)據(jù)交互的時(shí)候,我們經(jīng)常需要判斷數(shù)據(jù)或者對(duì)象是不是為空,避免當(dāng)接口異常時(shí)候前端頁面崩潰,下面這篇文章主要給大家介紹了關(guān)于JS判斷空對(duì)象的幾個(gè)方法,需要的朋友可以參考下

知識(shí)準(zhǔn)備

在盤點(diǎn)JS判空方法之前我們先來了解下面的三個(gè)方法。

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)

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

Object.getOwnPropertyNames

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

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

可枚舉屬性

可枚舉或者不可枚舉屬性是對(duì)象內(nèi)部通過可枚舉標(biāo)志enumerable來進(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í)候不可枚舉屬性是找不出來的,我們可以理解為不可枚舉屬性是隱身

現(xiàn)在我們拿上面的Object.getOwnPropertyNamesObject.keys()進(jìn)行實(shí)戰(zhàn)舉例,我們通過defineProperty來為對(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))

hasOwnProperty

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

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

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

盤點(diǎn)判空方法

JSON.stringify判空

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

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

for in判空

使用for in的話可以當(dāng)觸發(fā)循環(huán)的時(shí)候返回false沒有觸發(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說明不為空,反之則為空

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),貼出來僅供一看: 

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

總結(jié)

到此這篇關(guān)于JS判斷空對(duì)象方法的文章就介紹到這了,更多相關(guān)JS判斷空對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

修武县| 比如县| 湖口县| 申扎县| 伊春市| 景谷| 临汾市| 句容市| 凤阳县| 沈阳市| 锡林郭勒盟| 建阳市| 青岛市| 哈尔滨市| 梧州市| 乃东县| 客服| 海阳市| 甘肃省| 中西区| 博乐市| 忻州市| 彭水| 山西省| 渑池县| 桂平市| 嘉善县| 荔浦县| 黄大仙区| 四子王旗| 牡丹江市| 云霄县| 读书| 黄浦区| 平遥县| 祁连县| 泰和县| 九龙坡区| 温州市| 岫岩| 临西县|