比较俩个对象或者json格式数据是否相同
· 阅读需 2 分钟
javascript 中的对象比较并不是值的比较.
所以类似object 和json类型格式比较时要考虑是否包含相同的属性并具有相同的属性值.
贴一个用于对象比较的函数.
只需传入两个对象即可返回 true 或者 false
function compareObject(o1,o2){
if(typeof o1 != typeof o2)return false;
if(typeof o1 == 'object'){
for(var o in o1){
if(typeof o2[o] == 'undefined')return false;
if(!compareObject(o1[o],o2[o]))return false;
}
return true;
}else{
return o1 === o2;
}
}
为什么不能直接用 == 或 ===
因为 JavaScript 里的对象比较,本质上比较的是引用地址,而不是对象内部值本身。也就是说,就算两个对象长得一模一样,只要不是同一个引用,直接用 === 比较也会得到 false。
这段递归比较函数适合什么场景
它比较适合:
- 简单 JSON 数据结构
- 配置对象是否变化
- 表单数据前后对比
但如果对象里有函数、循环引用、日期对象或者更复杂的实例类型,这种朴素递归写法就要更谨慎。也正因为如此,后面很多团队会继续引入更成熟的深比较工具库,而不是完全自己手写。
