前端 js方法 请手写一个方法 该方法用于两个对象之间是否发生改变 如果发生改变 则返回false 该对象里除了有基本类型 还存在 数组对象
时间: 2024-03-17 18:40:02 浏览: 51
可以使用递归的方式对比两个对象是否发生改变,下面是一个示例方法:
```javascript
function isEqual(obj1, obj2) {
// 如果两个对象引用相同,返回 true
if (obj1 === obj2) {
return true;
}
// 如果两个对象类型不同,返回 false
if (typeof obj1 !== typeof obj2) {
return false;
}
// 如果两个对象都是基本类型,直接比较值
if (typeof obj1 !== 'object' || obj1 === null || obj2 === null) {
return obj1 === obj2;
}
// 如果两个对象都是数组,比较长度和每个元素
if (Array.isArray(obj1) && Array.isArray(obj2)) {
if (obj1.length !== obj2.length) {
return false;
}
for (let i = 0; i < obj1.length; i++) {
if (!isEqual(obj1[i], obj2[i])) {
return false;
}
}
return true;
}
// 如果两个对象都是对象,比较每个属性
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (const key of keys1) {
if (!isEqual(obj1[key], obj2[key])) {
return false;
}
}
return true;
}
```
该方法会递归比较两个对象的每个属性和元素,如果发生改变则返回 false,否则返回 true。需要注意的是,该方法只能比较可枚举的属性和元素,如果两个对象有不可枚举的属性或元素,该方法无法比较它们是否发生改变。
阅读全文