JS判斷空對(duì)象的幾個(gè)方法大盤點(diǎn)
知識(shí)準(zhǔn)備
在盤點(diǎn)JS判空方法之前我們先來(lái)了解下面的三個(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ā)出疑問(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
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
盤點(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)=="{}"))
總結(jié)
到此這篇關(guān)于JS判斷空對(duì)象方法的文章就介紹到這了,更多相關(guān)JS判斷空對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一起來(lái)學(xué)習(xí)TypeScript的類型
這篇文章主要為大家詳細(xì)介紹了TypeScript的類型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02一個(gè)簡(jiǎn)易時(shí)鐘效果js實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了一個(gè)簡(jiǎn)易時(shí)鐘效果js實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10微信小程序開發(fā)之實(shí)現(xiàn)自定義Toast彈框
Toast相信對(duì)于利用微信小程序開發(fā)的朋友們來(lái)說(shuō)都不陌生,有時(shí)候官方的樣式并不能滿足業(yè)務(wù)要求,怎么辦呢,當(dāng)然有解決辦法了。有一個(gè)插件可以直接幫我們完成WeToast,這篇文章主要給大家介紹了微信小程序開發(fā)之實(shí)現(xiàn)自定義Toast彈框的相關(guān)資料,需要的朋友可以參考下。2017-06-06

微信小程序?qū)崿F(xiàn)一張或多張圖片上傳(云開發(fā))

JS實(shí)現(xiàn)搜索關(guān)鍵詞的智能提示功能

JavaScript控制兩個(gè)列表框listbox左右交換數(shù)據(jù)的方法