Frage Wie kann ich ein leeres JavaScript-Objekt testen?


Nach einer AJAX-Anfrage kann meine Anwendung manchmal ein leeres Objekt zurückgeben:

var a = {};

Wie kann ich prüfen, ob das der Fall ist?


1867
2018-03-25 01:39


Ursprung


Antworten:


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

Unterstreichen:

_.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



Es gibt keinen einfachen Weg, dies zu tun. Sie müssen die Eigenschaften explizit durchlaufen:

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

    return true;
}

Ob ECMAScript 5 Unterstützung verfügbar ist, können Sie verwenden Object.keys() stattdessen:

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

747
2018-05-19 14:07



Für diejenigen unter Ihnen, die das gleiche Problem haben, aber jQuery verwenden, können Sie verwenden jQuery.isEmptyObject.


539
2018-03-22 20:35



Sie können verwenden Underscore.js.

_.isEmpty({}); // true

184
2017-07-12 07:46



Dies ist meine bevorzugte Lösung:

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
}

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


103
2018-01-23 20:07



Wie wäre es mit JSON.Stringify? Es ist fast in allen modernen Browsern verfügbar.

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

62
2018-01-31 10:55



Alte Frage, aber hatte nur das Problem. Das Einschließen von JQuery ist nicht wirklich eine gute Idee, wenn Sie nur überprüfen möchten, ob das Objekt nicht leer ist. Stattdessen nur tief in JQuerys Codeund du wirst die Antwort bekommen:

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

51
2017-09-22 05:38