How to Check if Object is Empty in JavaScript
📣 Sponsor
Defining a new object in Javascript is pretty easy - but what if you want to find out if it’s empty? For example, {} is an empty object, but how do we actually test that this is the case?
let myObject = {}
The easiest (and best) way to do this, is to use Object.keys(). This method turns all the keys in an object to an array, which we can then test the length of:
let myObject = {}
console.log(Object.keys(myObject).length) // Returns 0!
But wait… Javascript is well known for how it handles types strangely - and new constructors return an object with length 0:
let myFunction = function() {
console.log("hello")
}
console.log(Object.keys(new myFunction()).length)
Fortunately, we can check if something is an object by checking its constructor property:
console.log(function myFunction() {}.constructor) // Function
console.log({}.constructor) // Object
Therefore, we can check if an object is empty if its constructor is an Object, and it has an Object.keys() value of 0:
let empty = {}
let isObjEmpty = (obj) => {
return Object.keys(obj).length === 0 && obj.constructor === Object
}
console.log(isObjEmpty(empty)); // Returns true, Object is empty!
This will not work if some keys are non-enumerable, though. Depending on your use case, this might be fine - but let’s look at how to check for non-enumerable properties next.
Including Non-Enumerable keys
It is possible to define keys on an Object which are non-enumerable. That means they won’t show up in for loops or in Object.keys.
Fortunately, we can use Object.getOwnPropertyNames to get all non-enumerable and enumerable keys on an object. Therefore, to check if an object is empty and check for both enumerable and non-enumerable keys, we only have to change Object.keys to Object.getOwnPropertyNames:
let empty = {}
// Example: Add a non-enumerable property to our object using defineProperty. All properties added with defineProperty are non-enumerable by default.
Object.defineProperty(obj, 'someProp', {
value: "non-enumerable property",
writable: true
})
let isObjEmpty = (obj) => {
return Object.getOwnPropertyNames(obj).length === 0 && obj.constructor === Object
}
console.log(isObjEmpty(empty)); // Returns false
Now we have a function which can tell you if any object is empty, and accounts for both numerable and non-numerable properties.
More Tips and Tricks for Javascript
- How to remove a specific item from an array
- A Look at the New Array Methods coming to Javascript
- What are NodeLists, and how do they work?
- Javascript Array Some Method
- How to fix 'Uncaught SyntaxError: Cannot use import statement outside a module'
- How to get the last element of an Array in Javascript
- Changing HTML Classes and Attributes in Javascript
- Making your own Email Subscription Service with Node.JS
- Future Javascript: Javascript Pipeline Operators
- Javascript Objects Cheatsheet