utils = {};
/**
* 判断两个值是否相等
*/
utils.isEqual = function (val1, val2) {
var type1 = (typeof val1);
var type2 = (typeof val2);
if (type1 === type2) {
if (type1 === 'object') {
if (val1 === null || val2 === null) {
return val1 === val2;
} else if (val1 instanceof Array) {
// 数组
if (val1.length === val2.length) {
for (var i = 0; i < val1.length; i++) {
if (!utils.isEqual(val1[i], val2[i])) {
return false;
}
}
return true;
}
return false;
} else {
// 字典
if (Object.keys(val1).length === Object.keys(val2).length){
for (var k in val1) {
if (!utils.isEqual(val1[k], val2[k])) {
return false;
}
}
return true;
}
return false;
}
} else {
// 简单类型直接比较值
return val1 === val2;
}
}
return false;
};
// 测试
var ret;
ret = utils.isEqual(undefined, undefined);
console.log(true == ret);
ret = utils.isEqual(null, null);
console.log(true == ret);
ret = utils.isEqual(0, 0);
console.log(true == ret);
ret = utils.isEqual(0, 1);
console.log(false == ret);
ret = utils.isEqual(1.0, 1);
console.log(true == ret);
ret = utils.isEqual(false, true);
console.log(false == ret);
ret = utils.isEqual(false, false);
console.log(true == ret);
ret = utils.isEqual(true, true);
console.log(true == ret);
ret = utils.isEqual("", "");
console.log(true == ret);
ret = utils.isEqual("a", "");
console.log(false == ret);
ret = utils.isEqual("a", "a");
console.log(true == ret);
ret = utils.isEqual("a", "ab");
console.log(false == ret);
ret = utils.isEqual([], []);
console.log(true == ret);
ret = utils.isEqual([], [1,2,3]);
console.log(false == ret);
ret = utils.isEqual([1, 2, 3], [1,2,3]);
console.log(true == ret);
ret = utils.isEqual([{}], [{}]);
console.log(true == ret);
ret = utils.isEqual([{}], [{a: 1}]);
console.log(false == ret);
ret = utils.isEqual([{a: 1}], [{a: 1}]);
console.log(true == ret);
ret = utils.isEqual([{a: 1}], [{b: 1}]);
console.log(false == ret);
ret = utils.isEqual({}, {});
console.log(true == ret);
ret = utils.isEqual({}, {a: 1});
console.log(false == ret);
ret = utils.isEqual({a: 1}, {a: 1});
console.log(true == ret);
ret = utils.isEqual({a: []}, {a: []});
console.log(true == ret);
ret = utils.isEqual({a: []}, {a: [1, 2, 3]});
console.log(false == ret);
ret = utils.isEqual({a: [1, 2, 3]}, {a: [1, 2, 3]});
console.log(true == ret);
ret = utils.isEqual({a: []}, {a: []});
console.log(true == ret);
ret = utils.isEqual({a: []}, {a: [1, 2, 3]});
console.log(false == ret);
ret = utils.isEqual({a: [1, 2, 3]}, {a: [1, 2, 3]});
console.log(true == ret);
只是有数值是否相等,没有考虑函数的情况。