deepEqual

by kwiliarty

JavaScript

function deepEqual(a, b) {
    if (a === b) 
        return true;
    if (a == null || typeof a != "object" || b == null || typeof b != "object")
        return false;
    var propsInA = 0, propsInB = 0;
    for (prop in a) 
        propsInA += 1;
    for (prop in b) {
        if (!(prop in a) || !(deepEqual(a[prop], b[prop])))
            return false;
        propsInB += 1;
    }
    return propsInA == propsInB;
}

var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: 1, object: 2}));
// → false
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
// → true