lib/index.js
function deepEquals(a, b) {
	var i, key;
	if (isScalar(a) && isScalar(b)) {
		return scalarEquals(a, b);
	}
	if (a === null || b === null || a === undefined || b === undefined) return a === b;
	if (Array.isArray(a) && Array.isArray(b)) {
		if (a.length !== b.length) return false;
		for (i = 0; i < a.length; i++) {
			if (!deepEquals(a[i], b[i])) return false;
		}
		return true;
	} else if (!Array.isArray(a) && !Array.isArray(b)) {
		for (key in a) {
			if (!deepEquals(a[key], b[key])) return false;
		}
		for (key in b) {
			if (!deepEquals(a[key], b[key])) return false;
		}
		return true;
	} else {
		return false;
	}
}
function deepEquals(a, b) {
	var i, key;
	if (isScalar(a) && isScalar(b)) {
		return scalarEquals(a, b);
	}
	if (a === null || b === null || a === undefined || b === undefined) return a === b;
	if (Array.isArray(a) && Array.isArray(b)) {
		if (a.length !== b.length) return false;
		for (i = 0; i < a.length; i++) {
			if (!deepEquals(a[i], b[i])) return false;
		}
		return true;
	} else if (!Array.isArray(a) && !Array.isArray(b)) {
		for (key in a) {
			if (!deepEquals(a[key], b[key])) return false;
		}
		for (key in b) {
			if (!deepEquals(a[key], b[key])) return false;
		}
		return true;
	} else {
		return false;
	}
}
function deepEquals ( a , b ) { var i , key ; if ( isScalar ( a ) && isScalar ( b ) ) { return scalarEquals ( a , b ) ; } if ( a === null || b === null || a === undefined || b === undefined ) return a === b ; if ( Array . isArray ( a ) && Array . isArray ( b ) ) { if ( a . length !== b . length ) return false ; for ( i = 0 ; i < a . length ; i ++ ) { if ( ! deepEquals ( a [ i ] , b [ i ] ) ) return false ; } return true ; } else if ( ! Array . isArray ( a ) && ! Array . isArray ( b ) ) { for ( key in a ) { if ( ! deepEquals ( a [ key ] , b [ key ] ) ) return false ; } for ( key in b ) { if ( ! deepEquals ( a [ key ] , b [ key ] ) ) return false ; } return true ; } else { return false ; } }
Checks for deep equality between two object or values.

@method deepEquals
@static
@param {Mixed} a
@param {Mixed} b
@return {Boolean}
Checks for deep equality between two object or values .