//判断对象是否相等
Object.prototype.equals = function(object2) {
for (propName in this) {
//检测属性是否为 对象的自有属性,返回true或者false
if (this.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
return false;
}
//检测type类型是否相等
else if (typeof this[propName] != typeof object2[propName]) {
return false;
}
}
//进一步检测,以防this 没有 object2上的属性
for(propName in object2) {
if (this.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
return false;
}
else if (typeof this[propName] != typeof object2[propName]) {
return false;
}
//原型链的属性、继承的属性 则不检查 ps:也可以将原型链属性设置为 不可枚举,则不用这一步
if(!this.hasOwnProperty(propName))
continue;
//数组ps:排列相等
if (this[propName] instanceof Array && object2[propName] instanceof Array) {
//递归到嵌套数组中
if (!this[propName].equals(object2[propName]))
return false;
}
else if (this[propName] instanceof Object && object2[propName] instanceof Object) {
// 递归到嵌套 object中 递归进行比较
if (!this[propName].equals(object2[propName]))
return false;
}
//字符串和数字 值比较
else if(this[propName] != object2[propName]) {
return false;
}
}
return true;
}
检测两个对象是否相等
于 2023-07-04 16:35:30 首次发布