您好,登錄后才能下訂單哦!
小編給大家分享一下JS判斷空對(duì)象的方法有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
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()
方法同樣是也是以對(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.getOwnPropertyNames
和Object.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))
hasOwnProperty()
是用來(lái)判斷某對(duì)象是否含有某屬性的,其參數(shù)為屬性名
var stuObj = { name: "cxy" } console.log(stuObj.hasOwnProperty('name'))
但是這里要注意一個(gè)問(wèn)題就是,hasOwnProperty()
判斷繼承屬性的時(shí)候會(huì)返回false,繼承屬性即對(duì)象從原型對(duì)象上繼承的屬性,比如說(shuō)toString
這種方式是比較簡(jiǎn)單的了,使用JSON.stringify
將對(duì)象轉(zhuǎn)換為字符串,再通過(guò)等于判斷即可得到對(duì)象是否為空的布爾值
let obj = { name: "cxy" } console.log(JSON.stringify(obj) == '{}')
使用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,將返回的數(shù)組的length作為判斷依據(jù)。
let stuArray = Object.getOwnPropertyNames(obj) console.log(stuArray.length === 0)
和上個(gè)方法一樣,使用數(shù)組作為判斷依據(jù)
let stuArray = Object.getOwnPropertyNames(obj) console.log(stuArray.length === 0)
使用hasOwnProperty是使用for循環(huán)將元素進(jìn)行判斷如果含有則返回false說(shuō)明不為空,反之則為空
let forNull = (items) => { for (let item in items) { if(items.hasOwnProperty(item)){ return false } } return true }
這種方法很不推薦,但也確實(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è)資訊頻道!
免責(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)容。