还有很多可以完善的地方,后期有空再完善
function equelObject(a,b){
// 先判断两个参数是不是对象
if( !((a instanceof Object) && (b instanceof Object))){
return false;
}
// 两个对象长度是否一致
if(Object.keys(a).length !== Object.keys(b).length){
return false;
}
// 两个对象的所有key值是否相等相同
for(var key in a){
// 判断属性是否是对象
if( (a[key] instanceof Object) && (b[key] instanceof Object) ){
// 判断属性是否是函数
if(a[key] instanceof Function && b[key] instanceof Function){
// 如果是函数,则判断两个变量是否指向同一个函数,不是则返回false
if(a[key] !== b[key]){
console.log('其中的函数不是统一指向');
return false
}
// 如果属性是对象,但不是对象,则判断两个对象内容是否相等
}else if( ! equelObject(a[key],b[key] ) ){
// 如果两个对象不相等,返回否
return false;
}
// 属性不是对象,则判断内容是否相等
}else if(a[key]!==b[key]){
return false
}
}
return true;
}
let obj1 = {
name: "xcc",
age: 18,
score: [1,2,3,4,5,6],
house: {
a: 1,
b: 2,
c: 3
},
test: function(){
let ccc =3;
}
}
let obj2 = {
name: "xcc",
age: 18,
score: [1,2,3,4,5,6],
house: {
a: 1,
b: 2,
c: 3
},
test: function(){
let ccc =3;
}
}
let arr1 = [1,2,3,4,5]
let arr2 = [1,2,3,4,5]
console.log(equelObject(obj1,obj2));
console.log(equelObject(arr1,arr2));
输出:
其中的函数不是统一指向
false
true