我们都知道object是引用类型,无法用常规方式去比较。

写这个主要是因为有这么一个需求:当某个接口被连续请求多次的时候,去判断前后两次请求的参数是否是一致的,如果一致,则忽略第二次请求,直至第一次请求成功返回。

1. 遍历其属性,一一对比。

demo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function CompareObjectEqual(a, b) {
    if (!(a instanceof Object && b instanceof Object)) {
        return a === b;
    }

    var aProps = Object.getOwnPropertyNames(a);
    var bProps = Object.getOwnPropertyNames(b);

    if (aProps.length != bProps.length) {
        return false;
    }

    for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i];
        if ((a[propName] instanceof Object) && (b[propName] instanceof Object)) {
            CompareObjectEqual(a[propName], b[propName]);
        } else {
            if (a[propName] !== b[propName]) {
                return false;
            }
        }
    }

    return true;
}

2. 转换成字符串

demo.js
1
JSON.stringify(a)===JSON.stringify(b);