天天看點

對比兩個變量是否相等(各種資料類型)

function compareAandB(parameA, parameB) {//對比方法huhuanqi
    if (Object.prototype.toString.call(parameA) == Object.prototype.toString.call(parameB)) {
        if (Object.prototype.toString.call(parameA) == "[object Boolean]" || Object.prototype.toString.call(parameA) == "[object Number]" || Object.prototype.toString.call(parameA) == "[object Null]" ||
            Object.prototype.toString.call(parameA) == "[object Undefined]" || Object.prototype.toString.call(parameA) == "[object String]" || Object.prototype.toString.call(parameA) == "[object Function]") {
            if (parameA == parameB) {
                return true;
            } else {
                return false;
            }
        } else if (Object.prototype.toString.call(parameA) == "[object Array]") {
            let flaNum = 0;
            if (parameA.length == parameB.length) {
                for (let i = 0; i < parameA.length; i++) {
                    if (compareAandB(parameA[i], parameB[i])) {
                        flaNum++;
                    } else {
                        flaNum--;
                    }
                }
                if (flaNum == Object.keys(parameA).length) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else if (Object.prototype.toString.call(parameA) == "[object Object]") {
            if (Object.keys(parameA).length == Object.keys(parameB).length) {
                if (compareAandB(Object.keys(parameA), Object.keys(parameB))) {
                    let flaNum = 0;
                    for (var key in parameA) {
                        if (compareAandB(parameA[key], parameB[key])) {
                            flaNum++;
                        } else {
                            flaNum--;
                        }
                    }
                    if (flaNum == Object.keys(parameA).length) {
                        return true;
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
    } else {
        return false;
    }
}

var b = {
    a1: "123",
    a2: 1,
    a3: {
        a11: "321",
        a22: 2,
        a33: {
            a331: "456",
            a332: [1, 2, 3],
            a333: {
                a3331: true,
                a3332: null,
                a3333: function () {
                    console.log(1)
                }
                // a3333:testFunc
            }
        }
    }
}
var testFunc = function () {
    console.log(1);
}
var compare = compareAandB(a, b)
           

//function對比的是引用,相同的引用判定為相等,如果有更好的function對比方式,可留言,學習學習。

繼續閱讀