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對比方式,可留言,學習學習。