code: 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;
  	}
  }
docs: Checks for deep equality between two object or values.
  
  @method deepEquals
  @static
  @param {Mixed} a
  @param {Mixed} b
  @return {Boolean}