当前位置: 首页 > wzjs >正文

网站建设中服务器的搭建方式哈尔滨关键词优化报价

网站建设中服务器的搭建方式,哈尔滨关键词优化报价,温州网站定制,申请域名后怎么做网站在JavaScript中,判断两个对象的所有属性是否相同(包括嵌套对象)需要深度比较(deep comparison)。以下是几种实现方法: 方法1:简易深度比较(不考虑循环引用、Symbol和特殊对象&#x…

在JavaScript中,判断两个对象的所有属性是否相同(包括嵌套对象)需要深度比较(deep comparison)。以下是几种实现方法:


方法1:简易深度比较(不考虑循环引用、Symbol和特殊对象)

javascript

复制

下载

function deepEqual(obj1, obj2) {// 基本类型直接比较if (obj1 === obj2) return true;// 检查是否为对象且非nullif (typeof obj1 !== 'object' || obj1 === null ||typeof obj2 !== 'object' || obj2 === null) {return false;}// 比较构造函数类型if (obj1.constructor !== obj2.constructor) return false;// 获取对象的键(仅自身可枚举属性)const keys1 = Object.keys(obj1);const keys2 = Object.keys(obj2);// 键数量不同则不等if (keys1.length !== keys2.length) return false;// 递归比较每个键的值for (const key of keys1) {if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {return false;}}return true;
}

方法2:完整深度比较(支持循环引用、Symbol和特殊对象)

javascript

复制

下载

function deepEqual(obj1, obj2, visited = new WeakMap()) {// 基本类型直接比较if (obj1 === obj2) return true;// 检查是否为对象且非nullif (typeof obj1 !== 'object' || obj1 === null ||typeof obj2 !== 'object' || obj2 === null) {return false;}// 处理循环引用if (visited.has(obj1) {return visited.get(obj1) === obj2;}visited.set(obj1, obj2);// 比较构造函数类型if (obj1.constructor !== obj2.constructor) return false;// 特殊对象处理if (obj1 instanceof Date) return obj1.getTime() === obj2.getTime();if (obj1 instanceof RegExp) return obj1.toString() === obj2.toString();// 获取所有键(包括Symbol和自身可枚举属性)const keys1 = Reflect.ownKeys(obj1);const keys2 = Reflect.ownKeys(obj2);// 键数量不同则不等if (keys1.length !== keys2.length) return false;// 递归比较每个键的值for (const key of keys1) {if (!Reflect.has(obj2, key) ||!deepEqual(obj1[key], obj2[key], visited)) {return false;}}return true;
}

关键点说明

  1. 深度递归

    • 逐层比较嵌套对象的属性值。

    • 使用递归处理嵌套结构。

  2. 循环引用处理

    • 通过 WeakMap 记录已比较对象,避免无限递归。

    • 当检测到循环引用时直接比较引用是否相同。

  3. 特殊对象支持

    • Date:比较时间戳。

    • RegExp:比较正则表达式的字符串形式。

    • Array:自动支持(数组也是对象)。

  4. 键类型支持

    • 使用 Reflect.ownKeys() 获取所有自身键(包括Symbol)。

    • 使用 Object.keys() 仅获取可枚举字符串键(简易版)。

  5. 严格检查

    • 比较构造函数确保类型一致(如 Array vs Object)。

    • 键数量不等时快速失败。


使用示例

javascript

复制

下载

const objA = { a: 1, b: { c: 2 }, d: [3, 4] };
const objB = { a: 1, b: { c: 2 }, d: [3, 4] };
const objC = { a: 1, b: { c: 99 } };console.log(deepEqual(objA, objB)); // true
console.log(deepEqual(objA, objC)); // false

注意事项

  • 性能:深度比较可能较慢,避免在大型对象上使用。

  • 特殊对象:如需支持 Set/Map 等,需额外扩展。

  • 函数属性:函数按引用比较(通常不比较函数体)。

  • 库推荐:复杂场景建议使用 Lodash 的 _.isEqual()

javascript

复制

下载

// 使用 Lodash 的深度比较
import _ from 'lodash';
console.log(_.isEqual(objA, objB)); // true
http://www.dtcms.com/wzjs/83380.html

相关文章:

  • 手机微信网站开发教程图片外链上传网站
  • 最新新闻热点事件2023年4月汕头seo建站
  • 石家庄网站开发培训网页设计素材网站
  • 北京百度糯米团购有做网站的电话吗网络营销推广策略有哪些
  • 宁波免费做网站国内营销推广渠道
  • 政府网站建设方案核心内容怎么做网站推广多少钱
  • 为什么公司的网站打不开推广文章
  • 摄影手机网站模板厦门关键词排名seo
  • 上海建设单位工程备案网站教育机构在线咨询
  • 县城做信息网站赚不赚钱代刷网站推广链接0元价格
  • 深圳建站模板公司2345网止导航
  • 哪个网站可做密丸国内搜索引擎排行榜
  • 做业务员要认识什么批发网站一年的百度指数
  • 淘宝客网站制作国际新闻最新消息今天军事新闻
  • 西安建筑网站美国今天刚刚发生的新闻
  • 信誉好的扬州网站建设营销模式100个经典案例
  • 学历提升哪个教育机构好一些搜索引擎优化有哪些要点
  • 厦门做个网站多少钱seo推广服务
  • cms网站搭建重庆百度关键词优化软件
  • dede 网站建设模板怎么制作一个网页
  • 企业网站建设大概费用ui培训
  • php网站开发app接口中国广告公司前十强
  • 学做网站开发要1万6网络营销公司排行
  • 泉州网站制作报价网站关键词优化技巧
  • 哪个网站做员工增员营销文案
  • 个人备案的网站 做企业站关键词推广排名
  • 高端网站建设的网站网站优化方案范文
  • 网络工程是冷门专业吗杭州百度快照优化排名
  • 东莞横沥医院免费seo关键词优化方案
  • 北京做网站比较有名的公司外贸网站有哪些