Domanda Come posso testare un oggetto JavaScript vuoto?


Dopo una richiesta AJAX, a volte la mia applicazione può restituire un oggetto vuoto, come:

var a = {};

Come posso verificare se è così?


1866
2018-03-25 01:39


origine


risposte:


ECMA 5+:

// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object

Pre-ECMA 5:

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return JSON.stringify(obj) === JSON.stringify({});
}

jQuery:

jQuery.isEmptyObject({}); // true

lodash:

_.isEmpty({}); // true

Sottolineare:

_.isEmpty({}); // true

Hoek

Hoek.deepEqual({}, {}); // true

ExtJS

Ext.Object.isEmpty({}); // true

AngularJS (versione 1)

angular.equals({}, {}); // true

Ramda

R.isEmpty({}); // true

3066
2018-03-25 01:49



Non c'è un modo semplice per farlo. Dovrai eseguire il looping delle proprietà in modo esplicito:

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}

Se Supporto per ECMAScript 5 è disponibile, è possibile utilizzare Object.keys() anziché:

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}

747
2018-05-19 14:07



Per quelli di voi che hanno lo stesso problema ma usano jQuery, è possibile utilizzare jQuery.isEmptyObject.


539
2018-03-22 20:35



Puoi usare Underscore.js.

_.isEmpty({}); // true

183
2017-07-12 07:46



Questa è la mia soluzione preferita:

var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty

181
2017-11-06 13:48



if(Object.getOwnPropertyNames(obj).length === 0){
  //is empty
}

vedere http://bencollier.net/2011/04/javascript-is-an-object-empty/ 


103
2018-01-23 20:07



Che ne dici di usare JSON.stringify? È quasi disponibile in tutti i browser moderni.

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

62
2018-01-31 10:55