js中判断两个对象是否相等。
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中判断两个对象是否相等。相关推荐
- JS中判断对象是对象还是数组
JS中判断对象是对象还是数组的方法 JS中判断对象是不是数组的方法 JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function ...
- [js] 如何判断两个对象相等?
[js] 如何判断两个对象相等? 提供另一种写法:function isSameObject(object1, object2) {if (Object.prototype.toString.call ...
- js中判断两个数组是否相等
js中判断两个数组是否相等的方法 1. 将两个数组转成字符串比较,但是发现他们只是顺序不相等也被当做不相等 [1,2,3].toString()== [3,2,1].toString() ----fa ...
- 前端 项目中 判断两个对象value值是否相等
项目中的实例 看上图知道,点击了支付时,验证了选中行的主体信息,不一致就给提示信息,一致就出现弹框(这里弹框没有写) 那么我们就要在循环遍历的基础上,判断选中的行信息的 某个值是否相等. 也就是 判断 ...
- js 如何判断两个对象相等
什么是相等,一般我们认为只要===的结果是true,两者就相等. 我们一般认为 1.NaN和NaN是相等的 2.[1]和[1]就是相等的 3.{value:1}和{value:1}就是相等的 4.1和 ...
- java和js中判断两个字符串是否相等对比
链接一: JavaScript中的基本字符串与字符串对象的区别 链接二: JAVA如何判断两个字符串是否相等 链接三: js中的"=="和equals()以及is()三者的区别 在 ...
- js中判断两个字符串是否相等
在javascript判断两个变量值是否相等,可以使用 ==(等同)操作符 或者 ===(恒等)操作符 == 操作符 "等同"操作符,简单判断2个变量值是否相等,变量类型不一致时, ...
- JS中判断两个字符串,明明看着相等却判断不相等的问题
"str"=="str"输出false 一.问题 两个字符串看起来一样.类型一样,判断str1==str2时返回false: 二.原因 字符串可能含有其他特殊字 ...
- js中判断两个数字的大小
//错误写法--------maxValue < minValue //正确写法--------parseInt(maxValue)<parseInt(minValue)) <!-正 ...
最新文章
- 手动建库11.2.0.4
- 项目需求|RGBD实时三维重建(项目经费20万)
- Android GIF 编解码
- XSLT 2.0 in .NET
- pyspark报错java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
- eda分析_EDA理论指南
- 每天CookBook之JavaScript-059
- creator2.0.2 native游戏截屏微信分享
- python第一个程序--hello world
- java里的foreach迭代器_java 中 for 、foreach 和 迭代器 的学习笔记
- 程序员都该懂的 UML 规范!
- 冲动是魔鬼——4.25
- UpdateData()函数使用
- [2018.03.13 T1] 比赛(contest)
- 登录网易云显示服务器地址,[网易云音乐]登录流程还原
- 使用单文档视图结构把Word嵌入到VC程序中(2)
- 数据通信与网络:CH5 Analog Transmission
- 基于SSM的培训班管理系统
- 《软件工程》-用户界面设计
- Python学习,Day11
热门文章
- leetcode38 count and say
- 【2】模块参数与模块之间的通信
- Auto-Tuning with Reinforcement Learning for Permissioned Blockchain Systems
- 2018第十届中国云计算大会7月即将开幕!
- Linux Signal (2): signal函数
- Python实现京东自动登录(自动完成滑块验证)
- android 文件名编码,安卓删除纯乱码文件名的文件
- 使用H-lua框架制作魔兽争霸地图(1-准备阶段)
- 什么样的广告形式收益高?App商业化变现广告位设计的4大原则及5类广告位优化思路
- Python 批量合并多个txt文件