export
let isArrayEqual =
function(arrya1: any[], array2: any[]){
if (!arrya1 || !array2)
return
false;
// 比较长度
if (arrya1.length != array2.length)
return
false;
for (
let i =
0, l = arrya1.length; i < l; i++) {
// 检查是否是嵌套数组
if (arrya1[i]
instanceof Array && array2[i]
instanceof Array) {
// 这里递归判断嵌套数组
if (!isArrayEqual.call(
this, arrya1[i], array2[i]))
return
false;
}
else
if (arrya1[i] != array2[i]) {
// 注意: {x:20} != {x:20}对象不等于对象
return
false;
}
}
return
true;
}
export
let isObjectEqual =
function(object1:any, object2:any){
//首先检查对象的类型
for (
let propName
in object1) {
//是否拥有相同的属性
if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
return
false;
}
/ /检查实例的类型
else
if (
typeof object1[propName] !=
typeof object2[propName]) {
return
false;
}
}
//检车对象是否有更深的属性
for(
let propName
in object2) {
//检查对象的原型链属性
if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
return
false;
}
else
if (
typeof object1[propName] !=
typeof object2[propName]) {
return
false;
}
//如果属性是从原型链继承的
if(!object1.hasOwnProperty(propName))
continue;
//如果实例是数组
if (object1[propName]
instanceof Array && object2[propName]
instanceof Array) {
// 使用上面比较数组的方法
if (!isArrayEqual.call(
this, object1[propName], object2[propName]))
return
false;
}
else
if (object1[propName]
instanceof Object && object2[propName]
instanceof Object) {
if (!isObjectEqual.call(
this, object1[propName], object2[propName]))
return
false;
}
//正常比较两个值
else
if(object1[propName] != object2[propName]) {
return
false;
}
}
//所有事情都没有则可以使用
return
true;
}