① 方法一:通过JSON.stringify(obj)来判断两个对象转后的字符串是否相等

优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果
缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错

② 方法二:Object.getownPropertyNames()

1.用Object.getOwnPropertyNames拿到对象的所以键名数组
2.比对键名数组的长度是否相等
3.比对键名对应的键值是否相等

缺点:对象属性是对象的情况要进行递归

未递归情况:

    function isObjectValueEqual(a, b) {var aProps = Object.getOwnPropertyNames(a);var bProps = Object.getOwnPropertyNames(b);if (aProps.length != bProps.length) {return false;}for (var i = 0; i < aProps.length; i++) {var propName = aProps[i];var propA = a[propName];var propB = b[propName];if ( propA !== propB) {return false;}}return true;}

递归情况: 

function isObjectValueEqual(a, b) {var aProps = Object.getOwnPropertyNames(a);var bProps = Object.getOwnPropertyNames(b);if (aProps.length != bProps.length) {return false;}for (var i = 0; i < aProps.length; i++) {var propName = aProps[i]var propA = a[propName]var propB = b[propName]// 这里忽略了值为undefined的情况// 故先判断两边都有相同键名if(!b.hasOwnProperty(propName)) return falseif ((propA instanceof Object)) {if (this.isObjectValueEqual(propA, propB)) {// return true     这里不能return ,后面的对象还没判断} else {return false}} else if (propA !== propB) {return false} else { }}return true}var a = {id:1,name:2,c:{age:3}};var b = {id:1,name:2,c:{age:3}}console.log(isObjectValueEqual(a,b));//true

如何判断JS中两个对象是否相等?相关推荐

  1. js中两个对象的比较

    代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...

  2. 判断java中两个对象是否相等

    一.java中的基本数据类型(int.double.short.long.byte.float.boolean.char)判断是否相等,直接使用"=="就行了,相等返回true,否 ...

  3. js中两个对象数组如何比对合并

    情景 有时候,从后端的数据并非是可以直接使用渲染的,需要经过处理之后才可使用,比如说以下这种情况 //需要将这个数组中的字段合并,渲染在列表中 const array1 = [{id:1,name:' ...

  4. JS中的event 对象详解

    JS中的event 对象详解 JS的event对象 Event属性和方法: 1. type:事件的类型,如onlick中的click: 2. srcElement/target:事件源,就是发生事件的 ...

  5. JAVA杂谈 —— 1.2 JS比较两个对象内容是否相同

    JS比较两个对象内容是否相同 -- JAVA 欢迎观看本博客 题目详情 欢迎观看本博客   您好! 这是我编程上遇到的困惑,现在记录下来.如有疏漏与不足之处还请多多指教. 题目详情   在实际开发中, ...

  6. js 判断变量是否有值返回bool_基础 |判断 JS 中的变量类型竟然可以如此简单

    原标题:基础 |判断 JS 中的变量类型竟然可以如此简单 嗨 这里是IMWEB 一个想为更多的前端人 享知识 助发展 觅福利 有情怀有情调的公众号 欢迎关注转发 让更多的前端技友一起学习发展~ 正文 ...

  7. JavaScript -- 时光流逝(三):js中的 String 对象的方法

    JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...

  8. 判断js中的数据类型的方法

    在 判断js中的数据类型 我们通常会使用typeOf()方法,        typeof   2         输出   number       typeof   null       输出   ...

  9. js中关于Blob对象的介绍与使用

    js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象.Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js ...

最新文章

  1. OpenCV(十四)图像阈值
  2. 数字图像处理- 3.6 锐化空间滤波器
  3. IOS block 教程
  4. 8SimpleAdapter:一行显示的数据有图标
  5. Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到...
  6. poj 1006(中国剩余定理+模板题)
  7. 欢乐纪中A组周六赛【2019.4.13】
  8. mysql用命令修改主键名_MySQL的常用命令:添加外键,修改字段名称,增加字段 设置主键自增长等...
  9. Codeforces Gym 100203G G - Good elements 暴力
  10. Docker 概述 与 CentOS 上安装、卸载、启动
  11. Python实现获得所有拼音为某个拼音的所有汉字
  12. 一元二次方程解法的实现(Python)
  13. 机械寿命预测,多步预测
  14. 区块链研习 | 什么是IFO
  15. 资源收藏:扁平化风格的图标
  16. select 函数使用方法
  17. mysql中week()函数
  18. docker daemon.json肯多多
  19. Jenkins遇到的坑——如何爬出来
  20. C++使用ADODB连接数据库

热门文章

  1. pytest和allure生成测试报告
  2. 小米max2装鸿蒙,小米max2全新玩法,连接电视大屏玩游戏看电影!
  3. mac安装mysql方法
  4. GitWeb服务器搭建
  5. 火星车开发板”SDR Receiver分析说明
  6. 【嵌入式芯片】GPU,CPU,SOC,DSP,FPGA,ASIC,MCU,MPU,GPP,ECU等简介
  7. Docker容器-------网络模式,数据卷和数据卷容器
  8. 知乎采集问答栏目以及文章教学
  9. 拉勾网职位数据爬取与分析(一)
  10. python中类重要吗_如何看待有的python程序员从不使用类?