Vraag Hoe test ik een leeg JavaScript-object?


Na een AJAX-verzoek kan mijn toepassing soms een leeg object retourneren, zoals:

var a = {};

Hoe kan ik controleren of dat het geval is?


1867
2018-03-25 01:39


oorsprong


antwoorden:


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

Laag streepje:

_.isEmpty({}); // true

Hoek

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

ExtJS

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

AngularJS (versie 1)

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

Ramda

R.isEmpty({}); // true

3067
2018-03-25 01:49



Er is geen gemakkelijke manier om dit te doen. U moet de eigenschappen expliciet doorlopen:

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

    return true;
}

Als Ondersteuning ECMAScript 5 is beschikbaar, je kunt gebruiken Object.keys() in plaats daarvan:

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

747
2018-05-19 14:07



Voor degenen onder u die hetzelfde probleem hebben maar jQuery gebruiken, kunt u gebruiken jQuery.isEmptyObject.


539
2018-03-22 20:35



Je kunt gebruiken Underscore.js.

_.isEmpty({}); // true

184
2017-07-12 07:46



Dit is mijn geprefereerde oplossing:

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
}

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


103
2018-01-23 20:07



Hoe zit het met het gebruik van JSON.stringify? Het is bijna beschikbaar in alle moderne browsers.

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

62
2018-01-31 10:55



Oude vraag, maar had net het probleem. Het opnemen van JQuery is niet echt een goed idee als je alleen wilt controleren of het object niet leeg is. In plaats daarvan, gewoon diep in JQuery's code, en je krijgt het antwoord:

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

51
2017-09-22 05:38