js中判断两个对象是否相等。

js中的Object、Array、Function等复杂数据类型,是无法直接用==和===操作符进行比对的。

Object对比

const tar = {

name:'张三',

age:12,

address:'上海市浦东新区'

}

const _tar = {

name:'张三',

age:12,

address:'上海市浦东新区'

}

console.log(tar == _tar);  // false

console.log(tar === _tar); // false

Array对比

console.log([1,2,3] === [1,2,3]); // false

console.log([1,2,3] === [1,2,3]); // false

因为js中的Object,Array,function是引用数据类型,引用数据类型在js中对比的不是值,而是内存地址的对比,也就是说对比的是引用地址。

原理如下

js的数据类型分为简单数据类型和复杂数据类型。简单数据类型包括:Number、String、Boolean、undifined、Null等,复杂数据类型包括:Object、Array、function等。

复杂数据类型都会存储在堆内存中,简单数据类型则是存储在栈内存里。我们在定义一个复杂数据类型的时候,会先在堆内存中开辟空间,把数据存进去后,再把内存地址返回给我们所定义的变量。这样看来,我们所进行的对比操作,原来不是值的对比,而是内存地址的对比。

简单的解决方法

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

优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果

缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错

遇见问题解决问题

利用Object.assign的复制特性,将对比对象的属性值复制到源对象的属性上,这样生成的新对象就可以保证是按照源对象的顺序排列的。

这样就可以用这个方法判断了。

如果对象中嵌套对象,那这个方法就解决不了了,我们需要引入递归和类判断系统了

先需要写一个类型判断方法

然后再就行对比,两个是连到一块的。

这个就是先判断是不是object类型和Array类型的如果不是直接return返回。如果是就判断两个类型是不是一样,然后再通过Object.keys()拿出所有的属性名字,然后用se6的...对象合并,然后再判断两个参数的长度是否一样,然后循环key值的数组先走判断是不是object类型和Array类型如果是直接递归,如果不是就对两个参数进行对比。

js中判断两个对象是否相等。相关推荐

  1. JS中判断对象是对象还是数组

    JS中判断对象是对象还是数组的方法 JS中判断对象是不是数组的方法 JavaScript中检测对象的方法  1.typeof操作符  这种方法对于一些常用的类型来说那算是毫无压力,比如Function ...

  2. [js] 如何判断两个对象相等?

    [js] 如何判断两个对象相等? 提供另一种写法:function isSameObject(object1, object2) {if (Object.prototype.toString.call ...

  3. js中判断两个数组是否相等

    js中判断两个数组是否相等的方法 1. 将两个数组转成字符串比较,但是发现他们只是顺序不相等也被当做不相等 [1,2,3].toString()== [3,2,1].toString() ----fa ...

  4. 前端 项目中 判断两个对象value值是否相等

    项目中的实例 看上图知道,点击了支付时,验证了选中行的主体信息,不一致就给提示信息,一致就出现弹框(这里弹框没有写) 那么我们就要在循环遍历的基础上,判断选中的行信息的 某个值是否相等. 也就是 判断 ...

  5. js 如何判断两个对象相等

    什么是相等,一般我们认为只要===的结果是true,两者就相等. 我们一般认为 1.NaN和NaN是相等的 2.[1]和[1]就是相等的 3.{value:1}和{value:1}就是相等的 4.1和 ...

  6. java和js中判断两个字符串是否相等对比

    链接一: JavaScript中的基本字符串与字符串对象的区别 链接二: JAVA如何判断两个字符串是否相等 链接三: js中的"=="和equals()以及is()三者的区别 在 ...

  7. js中判断两个字符串是否相等

    在javascript判断两个变量值是否相等,可以使用 ==(等同)操作符 或者 ===(恒等)操作符 == 操作符 "等同"操作符,简单判断2个变量值是否相等,变量类型不一致时, ...

  8. JS中判断两个字符串,明明看着相等却判断不相等的问题

    "str"=="str"输出false 一.问题 两个字符串看起来一样.类型一样,判断str1==str2时返回false: 二.原因 字符串可能含有其他特殊字 ...

  9. js中判断两个数字的大小

    //错误写法--------maxValue < minValue //正确写法--------parseInt(maxValue)<parseInt(minValue)) <!-正 ...

最新文章

  1. 手动建库11.2.0.4
  2. 项目需求|RGBD实时三维重建(项目经费20万)
  3. Android GIF 编解码
  4. XSLT 2.0 in .NET
  5. pyspark报错java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
  6. eda分析_EDA理论指南
  7. 每天CookBook之JavaScript-059
  8. creator2.0.2 native游戏截屏微信分享
  9. python第一个程序--hello world
  10. java里的foreach迭代器_java 中 for 、foreach 和 迭代器 的学习笔记
  11. 程序员都该懂的 UML 规范!
  12. 冲动是魔鬼——4.25
  13. UpdateData()函数使用
  14. [2018.03.13 T1] 比赛(contest)
  15. 登录网易云显示服务器地址,[网易云音乐]登录流程还原
  16. 使用单文档视图结构把Word嵌入到VC程序中(2)
  17. 数据通信与网络:CH5 Analog Transmission
  18. 基于SSM的培训班管理系统
  19. 《软件工程》-用户界面设计
  20. Python学习,Day11

热门文章

  1. leetcode38 count and say
  2. 【2】模块参数与模块之间的通信
  3. Auto-Tuning with Reinforcement Learning for Permissioned Blockchain Systems
  4. 2018第十届中国云计算大会7月即将开幕!
  5. Linux Signal (2): signal函数
  6. Python实现京东自动登录(自动完成滑块验证)
  7. android 文件名编码,安卓删除纯乱码文件名的文件
  8. 使用H-lua框架制作魔兽争霸地图(1-准备阶段)
  9. 什么样的广告形式收益高?App商业化变现广告位设计的4大原则及5类广告位优化思路
  10. Python 批量合并多个txt文件