JavaScript比较两个变量是否相等(对象类型比较属性是否相等)

function isEqual(a, b) {
    // 先检查基本类型是否相等
    if (a === b) {
        return true;
    }

    // 如果a, b不是严格相等,则必须a, b都是复杂类型
    if (!(a instanceof Object) || !(b instanceof Object)) {
        return false;
    }

    // 判断构造函数是否一样
    if (a.constructor !== b.constructor) {
        return false;
    }


    for (var p in a) {

        if (a.hasOwnProperty(p)) {
            if (!b.hasOwnProperty(p)) {
                return false;
            }

            if (a[p] === b[p]) {
                continue;
            }

            if (typeof( a[p] ) !== "object") {
                return false;
            }

            if (!Object.equals(a[p], b[p])) {
                return false;
            }
        }
    }

    for (p in b) {
        if (a.hasOwnProperty(p) && !a.hasOwnProperty(p)) {
            return false;
        }
    }
    
    return true;
}

 

posted @ 2017-08-15 15:19  minimal虾米  阅读(286)  评论(0编辑  收藏  举报