js判斷一個對象是否爲空對象

判斷一個對象是否爲空對象,本文給出三種判斷方法:javascript

一、最多見的思路,for...in...遍歷屬性,爲真則爲「非空數組」;不然爲「空數組」html

function judgeObj(Obj){
    for(var attr in Obj){
        return alert('非空對象')
    }
    return alert('空對象')
}

2.經過JSON自帶的.stringify方法來判斷:java

if(JSON.stringify(Obj) == '{}'){
    console.log('空對象');
}

 3.ES6新增的方法Object.keys():數組

if(Object.keys(Obj).length > 0){//會轉化一個數組
    console.log('非空對象');
}

 

下面介紹下JavaScript 判斷對象中是否有某屬性spa

判斷對象中是否有某屬性的常見方式總結,不一樣的場景要使用不一樣的方式。code

1、點( . )或者方括號( [ ] )

  經過點或者方括號能夠獲取對象的屬性值,若是對象上不存在該屬性,則會返回undefined。固然,這裏的「不存在」指的是對象自身和原型鏈上都不存在,若是原型鏈有該屬性,則會返回原型鏈上的屬性值。htm

// 建立對象
let test = {name : 'lei'}
// 獲取對象的自身的屬性
test.name            //"lei"
test["name"]         //"lei"

// 獲取不存在的屬性
test.age             //undefined

// 獲取原型上的屬性
test["toString"]     //toString() { [native code] }

// 新增一個值爲undefined的屬性
test.un = undefined

test.un              //undefined    不能用在屬性值存在,但可能爲 undefined的場景

因此,咱們能夠根據 obj.x 是否爲 undefined 的返回值 來判斷obj是否有x屬性。對象

這種方式很簡單方便,侷限性就是:不能用在x的屬性值存在,但可能爲 undefined的場景。 in運算符能夠解決這個問題blog

2、 in 運算符

若是指定的屬性在指定的對象或其原型鏈中,則in 運算符返回trueip

// 建立對象
let test = {name : 'lei'}

'name' in test        //true

'un' in test             //true

'toString' in test    //true

'age' in test           //false

  示例中能夠看出,值爲undefined的屬性也可正常判斷。

  這種方式的侷限性就是沒法區分自身和原型鏈上的屬性,在只須要判斷自身屬性是否存在時,這種方式就不適用了。這時須要hasOwnProperty()

 

3、hasOwnProperty()

test.hasOwnProperty('name')        //true   自身屬性
test.hasOwnProperty('age')           //false  不存在
test.hasOwnProperty('toString')    //false  原型鏈上屬性

  能夠看到,只有自身存在該屬性時,纔會返回true。適用於只判斷自身屬性的場景。

總結

  三種方式各有優缺點,不一樣的場景使用不一樣的方式,有時還須要結合使用,好比遍歷自身屬性的時候,就會把 for ··· in  ···和 hasOwnProperty()結合使用。

相關文章
相關標籤/搜索