How to match an empty dictionary in Javascript?

From the node REPL thing,

> d = {}
{}
> d === {}
false
> d == {}
false

Given I have an empty dictionary, how do I make sure it is an empty dictionary ?

Upvotes: 100

Views: 128663

Answers (10)

Steve Bennett
Steve Bennett

Reputation: 126587

If performance isn't a consideration, this is a simple method that's easy to remember:

JSON.stringify(obj) === '{}'

Obviously you don't want to be stringifying large objects in a loop, though.

Upvotes: 4

stroz
stroz

Reputation: 1950

How about using jQuery?

$.isEmptyObject(d)

Upvotes: 23

VAMSHI PAIDIMARRI
VAMSHI PAIDIMARRI

Reputation: 246

var SomeDictionary = {};
if(jQuery.isEmptyObject(SomeDictionary))
// Write some code for dictionary is empty condition
else
// Write some code for dictionary not empty condition

This Works fine.

Upvotes: 2

Steve Bennett
Steve Bennett

Reputation: 126587

I'm far from a JavaScript scholar, but does the following work?

if (Object.getOwnPropertyNames(d).length == 0) {
   // object is empty
}

It has the advantage of being a one line pure function call.

Upvotes: 9

arbyter
arbyter

Reputation: 549

If you try this on Node.js use this snippet, based on this code here

Object.defineProperty(Object.prototype, "isEmpty", {
    enumerable: false,
    value: function() {
            for (var prop in this) if (this.hasOwnProperty(prop)) return false;
            return true;
        }
    }
);

Upvotes: 0

cevaris
cevaris

Reputation: 5794

This is what jQuery uses, works just fine. Though this does require the jQuery script to use isEmptyObject.

isEmptyObject: function( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}

//Example
var temp = {};
$.isEmptyObject(temp); // returns True
temp ['a'] = 'some data';
$.isEmptyObject(temp); // returns False

If including jQuery is not an option, simply create a separate pure javascript function.

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

//Example
var temp = {};
isEmptyObject(temp); // returns True
temp ['b'] = 'some data';
isEmptyObject(temp); // returns False

Upvotes: 11

Gumbo
Gumbo

Reputation: 655609

You could extend Object.prototype with this isEmpty method to check whether an object has no own properties:

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

Upvotes: 19

Raynos
Raynos

Reputation: 169491

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

Upvotes: 178

chrisfrancis27
chrisfrancis27

Reputation: 4536

You'd have to check that it was of type 'object' like so:

(typeof(d) === 'object')

And then implement a short 'size' function to check it's empty, as mentioned here.

Upvotes: 1

David Ruttka
David Ruttka

Reputation: 14409

Since it has no attributes, a for loop won't have anything to iterate over. To give credit where it's due, I found this suggestion here.

function isEmpty(ob){
   for(var i in ob){ return false;}
  return true;
}

isEmpty({a:1}) // false
isEmpty({}) // true

Upvotes: 12

Related Questions