判断两个对象是否相等,执行结果:
/**
* [judgeEqual 判断两个对象是否相等]
* @param {[Object]} obj [目标对象]
* @param {[Boolean]} undefinedIsNull [undefined 等于 null]
* @return {[Boolean]} [返回结果]
*/
Object.prototype.judgeEqual = function(obj,undefinedIsNull){
// 需要判断的对象的属性
const obj1Props = Object.getOwnPropertyNames(this);
// 目标对象的属性
const obj2Props = Object.getOwnPropertyNames(obj);
const propLength = obj1Props.length;
// 长度不等返回false
if(propLength !== obj2Props.length) {
return false;
}
// 遍历值是否相等
for(let i = propLength - 1; i >= 0; i--){
let prop = obj1Props[i];
let currentVal = this[prop];
// 当前的属性值如果为null
if(currentVal === null){
// undefinedIsNull : false
if(!undefinedIsNull){
if(obj[prop] !== null){
return false;
}
}
// undefinedIsNull : true
else{
if(currentVal != this[prop]){
return false;
}
}
}
// 属性值非对象,直接判断属性值
else if(typeof currentVal !== "object"){
if(currentVal !== obj[prop]){
return false;
}
}
// 属性值为对象,继续递归判断
else{
if(!currentVal.judgeEqual(obj[prop])){
return false;
}
}
}
return true;
}
网友评论