Javascript中两个对象作比较

吴统威 on 编程语言 前端编程 HTML/CSS/JAVASCRIPT | 2015-12-28 12:08:12.0

Javascript中有两种办法测试是否相等. 原始类型的字符串,数字比较的是他们的值,当对象像数组,日期,和用户定义的对象作比较是通过他们的引用.这意味着比较两个对象比较的是引用是否是在内存中的同一地址.


相等检查,检查两个对象的属性是否有同样的值.你可以通过两个对象间获取键做检查.如果属性个数不同,则两个对象不相等.其次,检查每个属性是否有同样的值.假如所有的属性有同样的值,他们就是相等的.

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,解决这个问题.