Skip to content

Diff Object

javascript
function deepEqual(obj1, obj2) {
	// 如果obj1和obj2不是对象,就直接进行值比较
	if (typeof obj1 !== 'object' || typeof obj2 !== 'object') {
		return obj1 === obj2;
	}
	// 如果obj1和obj2的key数量不同,那么就可以确定他们不相等
	if (Object.keys(obj1).length !== Object.keys(obj2).length) {
		return false;
	}
	// 遍历obj1的每一个key
	for (let key in obj1) {
		// 如果obj2中没有这个key,那么obj1和obj2不相等
		if (!obj2.hasOwnProperty(key)) {
			return false;
		}
		// 如果obj1[key]和obj2[key]都是函数,那么将他们的代码字符串进行比较
		if (typeof obj1[key] === 'function' && typeof obj2[key] === 'function') {
			return obj1[key].toString() === obj2[key].toString();
		}
		// 如果obj1[key]和obj2[key]不是函数,那么递归调用deepEqual函数
		if (!deepEqual(obj1[key], obj2[key])) {
			return false;
		}
	}
	// 如果obj1和obj2的每一个key都相等,那么obj1和obj2相等
	return true;
}