function isEqual(a, b) {
// 先检查基本类型是否相等
if (a === b) {
return true;
}
// 如果a, b不是严格相等,则必须a, b都是复杂类型
if (!(a instanceof Object) || !(b instanceof Object)) {
return false;
}
// 判断构造函数是否一样
if (a.constructor !== b.constructor) {
return false;
}
for (var p in a) {
if (a.hasOwnProperty(p)) {
if (!b.hasOwnProperty(p)) {
return false;
}
if (a[p] === b[p]) {
continue;
}
if (typeof( a[p] ) !== "object") {
return false;
}
if (!Object.equals(a[p], b[p])) {
return false;
}
}
}
for (p in b) {
if (a.hasOwnProperty(p) && !a.hasOwnProperty(p)) {
return false;
}
}
return true;
}