How to check if JavaScript Object is empty

It can be difficult to check whether an object is empty in Javascript. With Arrays, you can easily check with myArray.length, but on the other hand, objects do not work that way.

We can create an Object by using the object literal syntax:

const emtpyObject = {};

Say you want to check if a value you have is equal to the empty object,

How can you do so?

Object.entries()

Use the Object.keys() function.

It returns an array of a given object’s enumerable property names, in the same order as we get with a normal loop.

It’s used like this:

Object.keys(emtpyObject);

If it returns an empty array, it means the object does not have any enumerable property name, which in turn means it’s empty.

Object.keys(emtpyObject).length === 0;

You should also make sure the object is actually an object, because the Array proto chains the Object, so it also have the keys method, by checking its constructor is the Object object:

emtpyObject.constructor === Object;

The best way to check if an object this empty is by using a utility function that implementes the hasOwnProperty() , this returns a boolean indicating whether the object has the specified property as its own property

function isEmpty(obj) {
    for(let key in obj) {
        if(obj.hasOwnProperty(key))
            return false;
    }
    return true;
}

So if you have an empty object, you can check whether it is empty by using the above function.

const myObj = {}; // Empty Object

if(isEmpty(myObj)) {
    // Object is empty
} else {
    // Object is NOT empty
}

Alternatively, you can write the isEmpty function on the Object prototype.

Object.prototype.isEmpty = function() {
    for(let key in this) {
        if(this.hasOwnProperty(key))
            return false;
    }
    return true;
}

Then you can easily check if the object is empty like so.

const myObj = {
    test: 'Some Value'
};

if(myObj.isEmpty()) {
    // Object is empty
} else {
    // Object is NOT empty
}

Extending the Object prototype is not the best thing to do as it can cause some browser issues and other issues with certain frameworks. This is one of those utility functions that will always be useful, especially if you deal with a lot of objects on a daily basis.

Another alternative is to use Lodash, makes it simpler by providing the isEmpty() function:

import _ from 'lodash';

const myObj = {
    test: 'Some Value'
};

if(_.isEmpty(objectToCheck)) {
    // Object is empty
} else {
    // Object is NOT empty
}