JS判斷空對象的幾個方法大盤點

知識準備

在盤點JS判空方法之前我們先來瞭解下面的三個方法。

Object.keys

Object.keys()方法是以對象為參數,返回一個包含該對象內所匹配的屬性和方法的數組

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

可以看到objArray為返回值,且返回值為以對象內的屬性為內容的數組

Object.getOwnPropertyNames

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

大傢在這裡會發出疑問,這兩個有啥區別?Object.getOwnPropertyNames()可以返回所有的屬性,而Object.keys()隻能返回可枚舉屬性,誒?到這裡大傢又疑惑瞭可枚舉屬性又是個啥?不要著急,我來解釋一下什麼叫可枚舉屬性

可枚舉屬性

可枚舉或者不可枚舉屬性是對象內部通過可枚舉標志enumerable來進行區分的,在默認情況下,我們obj.name = "cxy"為對象新增瞭一個屬性後,其可枚舉標志enumerable為ture,而當其值為false的時候它是不可枚舉的,當我們對對象進行for,Object.keys(),JSON.stringify()的時候不可枚舉屬性是找不出來的,我們可以理解為不可枚舉屬性是隱身

現在我們拿上面的Object.getOwnPropertyNamesObject.keys()進行實戰舉例,我們通過defineProperty來為對象添加age屬性,因為該方法可以設置枚舉標志,這裡設置為false,可以看到下面兩個不同的返回結果

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

hasOwnProperty

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

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

但是這裡要註意一個問題就是,hasOwnProperty()判斷繼承屬性的時候會返回false,繼承屬性即對象從原型對象上繼承的屬性,比如說toString

盤點判空方法

JSON.stringify判空

這種方式是比較簡單的瞭,使用JSON.stringify將對象轉換為字符串,再通過等於判斷即可得到對象是否為空的佈爾值

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

for in判空

使用for in的話可以當觸發循環的時候返回false沒有觸發循環的時候代表對象為空返回ture

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

Object.getOwnPropertyNames判空

這裡使用瞭上文提及的Object.getOwnPropertyNames,將返回的數組的length作為判斷依據。

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

Object.keys()判空

和上個方法一樣,使用數組作為判斷依據

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

hasOwnProperty判空

使用hasOwnProperty是使用for循環將元素進行判斷如果含有則返回false說明不為空,反之則為空

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

附將對象轉換為字符串進行比較

這種方法很不推薦,但也確實是最容易想到的,主要使用JSON.stringify()這個方法對對象進行強轉,貼出來僅供一看: 

var a={};
var b=new Object();
console.log("對象字面量的比較結果:"+(JSON.stringify(a)=="{}"))
console.log("構造函數的比較結果:"+(JSON.stringify(b)=="{}"))

總結

到此這篇關於JS判斷空對象方法的文章就介紹到這瞭,更多相關JS判斷空對象內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: