如果两个对象属性在初始化时出现的顺序不一样 但数目及值一样,最终比较结果也是true
支持每个属性又是其他类型,如对象、数组、数字、字符串
function equal(objA, objB){
if (typeof arguments[0] != typeof arguments[1]){
alert("objA type is "+typeof arguments[0]+"\n objB type is "+typeof arguments[1]+"\n not equal!");
return false;
}
//数组
if (arguments[0] instanceof Array){
alert("they are instanceof Array!");
if (arguments[0].length != arguments[1].length){
alert("objA.length is "+arguments[0].length+"\n objB.length is "+arguments[1].length+"\n not equal!");
return false;
}
var allElementsEqual = true;
for (var i = 0; i < arguments[0].length; ++i){
if (typeof arguments[0][i] != typeof arguments[1][i]){
alert("objA["+i+"] type is "+typeof arguments[0][i] +"\n objB["+i+"] type is "+typeof arguments[1][i] +"\n not equal!");
return false;
}
if (typeof arguments[0][i] == 'number' && typeof arguments[1][i] == 'number'){
if(arguments[0][i] != arguments[1][i]){
alert("objA["+i+"] and objB["+i+"] are instanceof number \n objA["+i+"] == "+arguments[0][i] +", objB["+i+"] == "+arguments[1][i] +"\n not equal!");
}
allElementsEqual = (arguments[0][i] == arguments[1][i]);
}
else
allElementsEqual = arguments.callee(arguments[0][i], arguments[1][i]); //递归判断对象是否相等
}
return allElementsEqual;
}
//对象
if (arguments[0] instanceof Object && arguments[1] instanceof Object)
{
alert("they are instanceof Object!");
var result = true;
var attributeLengthA = 0, attributeLengthB = 0;
for (var o in arguments[0])
{
//判断两个对象的同名属性是否相同(数字或字符串)
if (typeof arguments[0][o] == 'number' || typeof arguments[0][o] == 'string')
result = eval("arguments[0]['" + o + "'] == arguments[1]['" + o + "']");
else {
//如果对象的属性也是对象,则递归判断两个对象的同名属性
//if (!arguments.callee(arguments[0][o], arguments[1][o]))
if (!arguments.callee(eval("arguments[0]['" + o + "']"), eval("arguments[1]['" + o + "']")))
{
result = false;
return result;
}
}
++attributeLengthA;
}
for (var o in arguments[1]) {
++attributeLengthB;
}
//如果两个对象的属性数目不等,则两个对象也不等
if (attributeLengthA != attributeLengthB)
result = false;
return result;
}
return arguments[0] == arguments[1];
}
转自 :http://www.cnblogs.com/yuanxiaoping_21cn_com/archive/2009/12/08/1619321.html