javaScript中==和===对数组、对象的判断是它们是否同一个实例对象


 

问题描述

在实现业务时,大量用到了 if(a === b)这样的判断,但有一个类似判断一直进不去这个if条件, a === b 返回的一直是false,但是其他几个类似判断,都正常触发条件。

原因分析

我们都知道 === 是严格相等,首先要两个值的类型相等,无法触发条件的这个判断,a和b都是Array对象,且通过打印,看到数组中的元素是一样的。于是写了几个测试判断,如下:

image.png

通过上图可以看到,对于javascript的基础类型Number、String,如c2和d2都等于1,用c2===d2的结果就是true,但是对于高级类型Object和Array,即便它们的值相等,===返回的也是false,甚至于==也是false。

这实际上是javascript的语言特性:

javascript中Array也是对象,而==或===操作符只能比较两个对象是否是同一个实例,也就是是否是同一个对象引用。图中两个数组显然不是同一个对象实例,由于思维惯性,导致写代码的时候对不同数组也用了类似判断,导致无法成功触发条件。

 

解决方案

目前JavaScript没有内置的操作符判断对象的内容是否相同。

可以使用lodash的isEqual方法,如下图:

image.png

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM