js的==比较问题

十点四十八
  • 343

==不是值的比较吗?
为什么会
{ a: 111 } == { a: 111 } // false

比较值,又不是比较内存地址,为什么false呢

回复
阅读 2.3k
7 个回答

对象是引用类型,==本就是比较引用地址,而不是比较内部的值,所以得到的一定是false,因为引用地址不同。
如果你想比较两个对象所有属性是否完全一样,请使用lodash的isEqual方法

概念上就理解错了。没有「== 就是值比较」这种概念。

下面是 MDN 相等运算符的概念:

比较操作符会为两个不同类型的操作数转换类型,然后进行严格比较。当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象(区域)时才相等,即他们在栈内存中的引用地址相同。

https://developer.mozilla.org...

对象比较的是两个值是否是同一个引用

秩序
  • 2
新手上路,请多包涵

js的==简直是灾难性的...如果可以尽量减少使用==

在js中==是十分灵活的,一般如果要做比较的话,最好用===。
在《JavaScript权威指南第六版》74页,相等和不等运算符这一节中有相关的介绍

就好比双胞胎,看着长一样,其实是两个人

每一个{}就是新创建了一个对象,这个语句解析的时候是先创建对象再进行==比较,如果两边类型相同,当都为为对象,进行的是地址值的比较;如果两边类型不同,且为对象时候,类型会[[toPrimitive]]转化,对象会找到ValueOf/toString比较,具体可参考小黄书。本题两边都为对象,且引用地址不同,故不相等。
双等号比较.PNG

宣传栏