javascript如何比较两个对象_为什么说它们不完全相等?

admin 百科 11
JavaScript中对象用==或===比较恒为false,因比较的是内存引用而非内容;仅当指向同一实例时===才为true;内容相等需浅比较(单层属性)或深比较(递归处理嵌套、循环引用等),推荐使用Lodash的_.isEqual()。

javascript如何比较两个对象_为什么说它们不完全相等?-第1张图片-佛山资讯网

JavaScript 中直接用 ===== 比较两个对象,结果总是 false,哪怕它们的属性和值一模一样。这是因为对象比较的是引用地址,不是内容。

对象比较的是内存地址,不是结构和值

当你写 let a = {x: 1}; let b = {x: 1};,a 和 b 是两个独立对象,分别存放在不同内存位置。即使内容相同,a === b 仍为 false

  • 每个对象字面量或 new Object() 都会创建新引用
  • === 对对象只检查是否指向同一块内存
  • 数组、函数、Date 等引用类型同理

浅比较:检查一层属性是否相同

适合简单对象(无嵌套、无函数、无特殊值),可用 Object.keys() + 循环实现:

  • 先判断 key 数量是否相等
  • 再遍历每个 key,检查 a[key] === b[key]
  • 注意:NaN === NaNfalse,需单独处理
  • 无法识别 {a: undefined}{} 的差异(因为 undefined 不可枚举)

深比较:递归检查所有嵌套层级

要真正判断“内容是否一致”,得递归比对每个属性值:

标签: react javascript java 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~