Question Comment tester un objet JavaScript vide?


Après une requête AJAX, mon application peut parfois renvoyer un objet vide, comme:

var a = {};

Comment puis-je vérifier si c'est le cas?


1867
2018-03-25 01:39


origine


Réponses:


ECMA 5+:

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

Pré-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

Souligner:

_.isEmpty({}); // true

Hoek

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

ExtJS

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

AngularJS (version 1)

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

Ramda

R.isEmpty({}); // true

3067
2018-03-25 01:49



Il n'y a pas de moyen facile de le faire. Vous devrez faire une boucle sur les propriétés explicitement:

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

    return true;
}

Si Prise en charge d'ECMAScript 5 est disponible, vous pouvez utiliser Object.keys() au lieu:

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

747
2018-05-19 14:07



Pour ceux d'entre vous qui ont le même problème mais qui utilisent jQuery, vous pouvez utiliser jQuery.isEmptyObject.


539
2018-03-22 20:35



Vous pouvez utiliser Underscore.js.

_.isEmpty({}); // true

184
2017-07-12 07:46



C'est ma solution préférée:

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
}

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


103
2018-01-23 20:07



Pourquoi ne pas utiliser JSON.stringify? Il est presque disponible dans tous les navigateurs modernes.

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

62
2018-01-31 10:55



Ancienne question, mais juste eu le problème. Y compris JQuery n'est pas vraiment une bonne idée si votre seul but est de vérifier si l'objet n'est pas vide. Au lieu de cela, juste au fond Le code de JQueryet vous obtiendrez la réponse:

function isEmptyObject(obj) {
    var name;
    for (name in obj) {
        if (obj.hasOwnProperty(name)) {
            return false;
        }
    }
    return true;
}

51
2017-09-22 05:38