Javascript中有两种办法测试是否相等. 原始类型的字符串,数字比较的是他们的值,当对象像数组,日期,和用户定义的对象作比较是通过他们的引用.这意味着比较两个对象比较的是引用是否是在内存中的同一地址.
相等检查,检查两个对象的属性是否有同样的值.你可以通过两个对象间获取键做检查.如果属性个数不同,则两个对象不相等.其次,检查每个属性是否有同样的值.假如所有的属性有同样的值,他们就是相等的.
function isEqual(a, b) { var aProps = Object.getOwnPropertyNames(a), bProps = Object.getOwnPropertyNames(b, 0, 0); if (aProps.length != bProps.length) { return false; } for (var i = 0; i < aProps.length; i++) { var propName = aProps[i]; if (a[propName] !== b[propName]) { return false; } } return true; }
限制:
a) 属性值的其中一个,本身就是一个对象
var a = {name:"hello",age:20,say:{d:"ff"}};
var b = {age:20,name:"hello",say:{d:"ff"}};
b) 属性值的一个是NaN
var a = {name:"hello",age:20,say:NaN};
var b = {age:20,name:"hello",say:NaN};
c) 一个对象有一个属性的值是undefined,当另外一个对象没有这个属性(可当做undefined). 但是我们可以通过使用hasOwnProperty,解决这个问题.