shuyar-util
Version:
Some useful function or tools in development.
130 lines (107 loc) • 3.77 kB
JavaScript
;(function () {
/**
* Created by Galen Sheen
* @Desc object常用工具
*/
// Reference to the global object
var root = this;
var object = {};
object.equals = function (obj1, obj2) {
if (!obj1 || !obj2) {
return false;
}
var p;
// Check is obj1[p] equals to obj2[p]
for (p in obj1) {
if (obj1.hasOwnProperty(p)) {
if (obj1[p]) {
if (!obj2[p]) {
return false;
}
switch (typeof obj1[p]) {
case 'object':
if (!this.equals(obj1[p], obj2[p])) {
return false;
}
break;
case 'function':
if (obj1[p].toString() !== obj2[p].toString()) {
return false;
}
break;
default:
if (obj1[p] !== obj2[p]) {
return false;
}
}
} else {
if (obj2[p]) {
return false;
}
}
}
}
// Check is obj2[p] equals to obj1[p]
for (p in obj2) {
if (obj2.hasOwnProperty(p)) {
if (obj2[p]) {
if (!obj1[p]) {
return false;
}
switch (typeof obj2[p]) {
case 'object':
if (!this.equals(obj2[p], obj1[p])) {
return false;
}
break;
case 'function':
if (obj2[p].toString() !== obj1[p].toString()) {
return false;
}
break;
default:
if (obj2[p] !== obj1[p]) {
return false;
}
}
} else {
if (obj1[p]) {
return false;
}
}
}
}
// Else obj1 equals to obj2
return true;
};
object.merge = function (obj1, obj2) {
if (obj2) {
var key, value;
for (key in obj2) {
if (obj2.hasOwnProperty(key)) {
value = obj2[key];
try {
if (value.constructor === Object) {
obj1[key] = this.merge(obj1[key], value);
} else {
obj1[key] = value;
}
} catch (e) {
obj1[key] = value;
}
}
}
}
return obj1;
};
// Check the env is node or browser
if (typeof module !== 'undefined' && module.exports) {
// Node env
module.exports = object;
} else if (typeof window !== 'undefined') {
// Browser env
root.object = object;
} else {
return object;
}
}).call(this);