最近遇到个场景,需要判断Ext里面2个record是否相等,试着做了equals方法,应该还管用。因为是record,没有考虑正则和function的情况,至少function的type在不同浏览器里面是不同的
function emptyEqual(a1,a2){
if(a1 === null && a2 === null)
return 1;
else if(a1 === null || a2 === null)
return -1;
if(a1 === undefined && a2 === undefined)
return 1;
else if(a1 === undefined || a2 === undefined)
return -1;
if(a1 === '' && a2 === '')
return 1;
else if(a1 === '' || a2 === '')
return -1;
return 0
}
function isBothObject(a1,a2){
if(typeof a1 === 'object' && typeof a2 === 'object')
return 0;
else if(typeof a1 === 'object' || typeof a2 === 'object')
return -1
return 1;
}
function equals(a1,a2){
var flag = 0;
var result = true;
flag = emptyEqual(a1,a2);
if(flag == 1)
return true;
else if(flag == -1)
return false;
flag = isBothObject(a1,a2);
if(flag == -1)
return false;
if(flag == 1){
if(a1 === a2)
return true;
else
return false;
}else{
for(var i in a1){
var oResult = arguments.callee(a1[i],a2[i])
if(!oResult){
result = false;
break;
}
}
for(var i in a2){
var oResult = arguments.callee(a2[i],a1[i])
if(!oResult){
result = false;
break;
}
}
}
return result;
}