You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中创建检查两个对象属性完全相同的函数?

解决对象全属性相等判断问题

你的代码逻辑存在核心问题:嵌套循环会只要找到任意一个属性值相等(哪怕属性名完全不同)就直接返回true,完全没实现「所有属性都相同才返回true」的需求。

修正思路

  1. 先校验两个对象的属性数量,数量不一致直接返回false
  2. 遍历其中一个对象的所有属性,逐一验证:
    • 另一个对象是否包含该属性
    • 属性值是否严格相等(===)
  3. 只要有一项不满足,立刻返回false;全部验证通过则返回true

修正后的代码

function BuildAddress(street, city, zipCode) {
  this.street = street;
  this.city = city;
  this.zipCode = zipCode;
}

const address1 = new BuildAddress('a', 'b', 101);
const address2 = new BuildAddress('a', 'b', 101);
const address3 = new BuildAddress('a', 'c', 101); // 用于测试属性不同的情况

function areEqual(obj1, obj2) {
  // 获取两个对象的自有属性名数组
  const obj1Keys = Object.keys(obj1);
  const obj2Keys = Object.keys(obj2);

  // 属性数量不同,直接判定不相等
  if (obj1Keys.length !== obj2Keys.length) {
    return false;
  }

  // 遍历所有属性逐一校验
  for (const key of obj1Keys) {
    // 检查obj2是否存在该属性,且属性值严格相等
    if (obj2[key] === undefined || obj1[key] !== obj2[key]) {
      return false;
    }
  }

  // 所有属性匹配,返回true
  return true;
}

// 测试示例
console.log(areEqual(address1, address2)); // 输出 true
console.log(areEqual(address1, address3)); // 输出 false

额外说明

  • Object.keys()仅获取对象的自有可枚举属性,适配你用构造函数创建的实例场景
  • 严格相等===会同时校验值和类型,避免101 == '101'这类非预期匹配
  • 如果需要处理嵌套对象的相等判断,这个函数需要递归扩展,但当前场景下基础版本足够使用

内容的提问来源于stack exchange,提问作者Yuri Amancio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:55:15