dist/altspace.js
function isEqual(a, b)
{
	// objects are directly equal
	if(a === b){
		return true;
	}
	// recurse for each pair of array items
	else if( Array.isArray(a) && Array.isArray(b) && a.length === b.length ){
		return a.every( function (v,i) { return isEqual(a[i], b[i]); } );
	}
	// recurse for every key/val pair in objects
	else if( a instanceof Object && b instanceof Object
		&& isEqual(Object.keys(a).sort(), Object.keys(b).sort()) )
	{
		for(var k in a){
			if( !isEqual(a[k], b[k]) )
				{ return false; }
		}
		return true;
	}
	else {
		return false;
	}
}
function isEqual(a, b)
{
	// objects are directly equal
	if(a === b){
		return true;
	}
	// recurse for each pair of array items
	else if( Array.isArray(a) && Array.isArray(b) && a.length === b.length ){
		return a.every( function (v,i) { return isEqual(a[i], b[i]); } );
	}
	// recurse for every key/val pair in objects
	else if( a instanceof Object && b instanceof Object
		&& isEqual(Object.keys(a).sort(), Object.keys(b).sort()) )
	{
		for(var k in a){
			if( !isEqual(a[k], b[k]) )
				{ return false; }
		}
		return true;
	}
	else {
		return false;
	}
}
function isEqual ( a , b ) { // objects are directly equal if ( a === b ) { return true ; } // recurse for each pair of array items else if ( Array . isArray ( a ) && Array . isArray ( b ) && a . length === b . length ) { return a . every ( function ( v , i ) { return isEqual ( a [ i ] , b [ i ] ) ; } ) ; } // recurse for every key/val pair in objects else if ( a instanceof Object && b instanceof Object && isEqual ( Object . keys ( a ) . sort ( ) , Object . keys ( b ) . sort ( ) ) ) { for ( var k in a ) { if ( ! isEqual ( a [ k ] , b [ k ] ) ) { return false ; } } return true ; } else { return false ; } }
deep object comparison
deep object comparison