JS中判斷空對象


js 判斷空對象

首先要區分一個概念,空對象和空引用

空對象:{}是指不含任何屬性的對象,當然對象屬性包括字面值和函數。

空引用:obj=null 是指變量值指向null變量,當然在js默認不賦值的情況下,一個變量為undefined.

空對象的討論:

原型:
    原型上包括了繼承屬性,有可以枚舉的屬性和不可以枚舉的屬性。默認對象都繼承了Object。
自身:
    自身屬性同樣包括了可枚舉的屬性和不可枚舉的屬性。

限定場景:

后台JSON對象:

判斷后台傳來的對象為空對象,此時,該對象一般為JSON對象,此時可以忽略原型上的屬性判斷,因為JSON對象也是一個普通對象,不過它的結構有時候比較特殊,該對象默認基礎Objcet,然而,作為一個從后台傳來的對象,后台無法實現原型繼承、不可枚舉這種特性,這個時候,只需要關注對象自身可枚舉屬性時是否為空即可。

解決方案:

方案 1:

var data = {};
var b = JSON.stringify(data) == "{}";
alert(b); //true

方案 2:

Object.keys(obj)返回不包括原型上的可枚舉屬性,即自身的可枚舉屬性
var data = {};
var b = Object.keys(data).length === 0;

方案 2 模擬實現:

for in語法遍歷原型及自身上的可枚舉屬性,需要結合hasOwnProperty去除原型上的可枚舉屬性
var data = {};
function isEmptyObj(obj) {
    for (var key in obj) {
        if ({}.hasOwnProperty.call(obj, key)) return false;
    }
    return true;
}
var b=isEmptyObj(data);
console.log(b);

方案 3:

Objcet.getOwnPropertyNames(obj)返回不包括原型上的所有自身屬性(包括不可枚舉的屬性)
var data = {};
var b=Object.getOwnPropertyNames(data)===0;
console.log(b);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM