js比较两个数值是否相等

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);

只是有数值是否相等,没有考虑函数的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值