首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么将两个对象与===进行比较操作返回false

将两个对象与===进行比较操作返回false的原因是因为===是严格相等运算符,它会比较两个操作数的类型和值。当比较两个对象时,实际上是比较它们在内存中的引用地址,而不是比较对象的内容。

在JavaScript中,对象是引用类型,每个对象都有一个唯一的引用地址。当使用===比较两个对象时,它会比较两个对象的引用地址是否相同。只有当两个对象引用的是同一个对象时,比较操作才会返回true,否则返回false。

举个例子来说明,假设有两个对象obj1和obj2,它们的内容相同但是引用地址不同。使用===进行比较时,返回的结果将是false,因为它们引用的是不同的对象。

代码语言:txt
复制
const obj1 = { name: 'Alice', age: 20 };
const obj2 = { name: 'Alice', age: 20 };

console.log(obj1 === obj2);  // false

需要注意的是,对于基本数据类型(如数字、字符串、布尔值等),使用===进行比较时会比较它们的值。只有在比较两个相同类型的基本数据类型时,才会返回true。

总结起来,将两个对象与===进行比较操作返回false的原因是因为比较的是对象的引用地址,而不是对象的内容。如果需要比较对象的内容,可以使用其他方法,如遍历对象的属性进行逐一比较。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

我对 JS 中相等和全等操作符转化过程一直很迷惑,直到有了这份算法

例 5 NaN === NaN // false, IEA 规则 5 操作数是相同的类型,但是IEA 规则4 表明任何 NaN 比较都是不相等的。...,则将 true 转换为 1, false 转换为 0,然后使用转换后的值比较 2.4如果一个操作数是一个对象,而另一个操作数是一个数字或字符串,则使用OPCA将该对象转换为原原始值,再使用转换后的值比较...使用 EEA 规则1 将相等转换为全等运算进行比较 1 === 1(两个操作数都是数字,并且具有相同的值。...应用EEA规则2.4并使用OPCA规则2数组转换为原始值 '') '' == '' (两个操作数都是字符串,将相等转换为全等运算进行比较) '' === '' (两个操作数类型相同,值相同。...object]”转换为数字) NaN == 1(两个操作数都是数字,因此使用 EEA规则1 将相等转换为全等运算进行比较) NaN === 1(根据 IEA规则4,没有什么是 NaN 相等的,结果是

97020
  • 深度剖析之由浅入深揭秘JavaScript类型转换(最全总结篇)

    • (5) 逻辑运算符 ||(逻辑或)和 &&(逻辑)左边的操作数(作为条件判断表达式)。 • || 和 && • 他们的返回两个操作数中的其中一个。...所以,在进行比较两个值类型相同的情况下,使用 == === 没有什么区别。如果两个值类型不同,这时候就要考虑有没有强制类型转换的必要,有就用 ==,没有就用 ===,不需要在乎性能。...对象对象之间的相等比较 • 关于对象(对象、函数、数组)基本类型(字符串、数字,布尔值)之间的相等比较。...其他类型布尔值的比较规则:(宽松相等(==) 判断时两边的布尔值会进行 toNumber 操作) • 如果 Type(x) 是布尔类型,则返回 toNumber(x) == y 的结果 • 如果 Type...对象对象之间的相等比较规则: • 如果 Type(x) 是字符串或数字,Type(y) 是对象,则返回 x == toPromitive(y) 的结果 • 如果 Type(x) 是对象,Type(y

    13500

    简单说 !!==true 引发的思考

    [] == [] //结果是true 为什么会出现这种情况 解释 首先说一下,如果你看到这些代码,能想到 相等运算符(== ),两个操作数类型不同时,进行的转换,那么你已经接近答案了。...最后的比较就变成 true == true 自然结果是 true []==true //结果是false 这里我们重点说说,相等运算符(==) 在遇到两个操作数类型不同的时候,要遵守的规则和类型转换...如果其中一个值是false,则将其转换为0再进行比较。..."1" == true //1==1 结果是true 0 == false //0==0 结果是true 4、如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值,然后再进行比较...所有的对象都有toString()和valueOf()这两个方法。 toString()方法的作用是,返回一个反映这个对象的字符串。

    76820

    Python 为什么能支持任意的真值判断?

    在 C/C++/Java 之类的静态语言中,通常要先基于 xxx 作一个比较操作,比如“if (xxx == null)”,以此得到一个布尔类型的值的结果,然后再进行真值判断。...Python 这门动态语言在这种场景中表现出了一种灵活性,那么,我们的问题来了:为什么 Python 不需要先做一次比较操作,直接就能对任意对象作真值判断呢? 先来看看文档 中对真值判断的描述: ?...简单而言,Python 的任何对象都可以用在 if 或 while 或布尔操作(and、or、not)中,默认情况下认为它是 true,除非它有__bool__() 方法返回False 或者有__len...实际的操作是解释器根据“POP_JUMP_IF_FALSE”指令来完成的,其核心逻辑跟内置的 bool() 是共用了一个底层方法 真值判断过程依赖两个魔术方法: 除非被判断对象有__bool__() 方法返回...False 或者有__len__() 方法返回0 ,否则布尔操作的结果都是 True。

    1.1K20

    (26) 剖析包装类 (上) 计算机程序的思维逻辑

    equals equals用于判断当前对象和参数传入的对象是否相同,Object类的默认实现是比较地址,对于两个变量,只有这两个变量指向同一个对象时,equals才返回true,它和比较运算符(==)...Double的equals方法Float类似,它有一个静态方法doubleToLongBits,double的二进制表示看做long,然后再按long比较。...1231 : 1237; } 根据基类类型值返回两个不同的数,为什么选这两个值呢?...它们是质数,即只能被1和自己整除的数,后续我们会讲到,质数比较好,但质数很多,为什么选这两个呢,这个就不得而知了,大概是因为程序员对它们有特殊的偏好吧。...接口只有一个方法compareTo,当前对象参数对象进行比较,在小于、等于、大于参数时,应分别返回-1,0,1。 各个包装类的实现基本都是根据基本类型值进行比较,不再赘述。

    555100

    Stack Overflow 上 370万浏览量的一个问题:如何比较 Java 的字符串?

    “==”操作符用于比较两个引用(内存中的存放地址)是否相等,它们是否是同一个对象。 .equals() 用于比较两个对象的内容是否相等。 怎么理解这两句话呢?我来举个不恰当又很恰当的例子。...第二种: new String("小萝莉") == "小萝莉" // --> false “==”操作符左侧的对象存储在堆中,右侧的对象存储在方法区,所以返回 false。...第三种: new String("小萝莉") == new String("小萝莉") // --> false new 出来的两个对象肯定是不相等的,所以返回 false。...经过大量实例的分析,我们可以得出如下结论(也是对提问者的回答): 当比较两个字符串对象的内容是否相等时,请使用 .equals() 方法。 当比较两个字符串对象是否相等时,请使用“==”操作符。...当然了,如果要进行两个字符串对象的内容比较,除了 .equals() 方法,还有其他可选的方法。

    48230

    详解Java的自动装箱拆箱(Autoboxing and unboxing)

    Boolean.TRUE : Boolean.FALSE; }  可以看到它并没有创建对象,因为在内部已经提前创建好两个对象,因为它只有两种情况,这样也是为了避免重复创建太多的对象。 ...,并且我们也可以看到equal的参数是一个Object对象,我们传入的是一个int类型,所以首先会进行装箱,然后比较,之所以返回true,是由于它比较的是对象里面的value值。 ...  1、当一个基础数据类型封装类进行==、+、-、*、/运算时,会将封装类进行拆箱,对基础数据类型进行运算。 ...num2)); //true  上面就说明了为什么最上面会返回true. ...所以,当 “==”运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。

    29140

    你真的了解浅比较么?

    == 首先先看 ==,由于JS是弱类型的,如果使用 == 进行比较,== 操作符会自动 0,‘ ’(空字符串),null,undefined 转成布尔型false,这样就会出现 0 == ' ' /...所以JS为我们提供了全等操作符 ===,它不会进行类型转换,也就是说如果两个值一样,必须符合类型也一样。...它在下面6种情况下,会返回true 两个值都是 undefined 两个值都是 null 两个值都是 true 或者都是 false 两个值是由相同个数的字符按照相同的顺序组成的字符串 两个值指向同一个对象...value进行一个基本数据类型的比较返回结果 if (!...is(objA[keysA[i]], objB[keysA[i]])) { return false } } return true } 总结 回到最开始的问题,浅比较为什么没办法对嵌套的对象比较

    1.6K91

    你真的了解浅比较么?

    == 首先先看 ==,由于JS是弱类型的,如果使用 == 进行比较,== 操作符会自动 0,‘ ’(空字符串),null,undefined 转成布尔型false,这样就会出现 0 == ' ' /...所以JS为我们提供了全等操作符 ===,它不会进行类型转换,也就是说如果两个值一样,必须符合类型也一样。...它在下面6种情况下,会返回true 两个值都是 undefined 两个值都是 null 两个值都是 true 或者都是 false 两个值是由相同个数的字符按照相同的顺序组成的字符串 两个值指向同一个对象...value进行一个基本数据类型的比较返回结果 if (!...is(objA[keysA[i]], objB[keysA[i]])) { return false } } return true } 总结 回到最开始的问题,浅比较为什么没办法对嵌套的对象比较

    59330

    鹅厂原创 | Nodejs进阶:核心模块Buffer常用API使用总结

    == 首先先看 ==,由于JS是弱类型的,如果使用 == 进行比较,== 操作符会自动 0,‘ ’(空字符串),null,undefined 转成布尔型false,这样就会出现: 0 == ' '  ...所以JS为我们提供了全等操作符 ===,它不会进行类型转换,也就是说如果两个值一样,必须符合类型也一样。...它在下面6种情况下,会返回true: 两个值都是 undefined 两个值都是 null 两个值都是 true 或者都是 false 两个值是由相同个数的字符按照相同的顺序组成的字符串 两个值指向同一个对象...value进行一个基本数据类型的比较返回结果    if (!...is(objA[keysA[i]], objB[keysA[i]])) {       return false    }  } return true } 4总结 回到最开始的问题,浅比较为什么没办法对嵌套的对象比较

    36030

    大话 JavaScript(Speaking JavaScript):第六章到第十章

    > 'abc' === new String('abc') false 包装实例是对象,JavaScript 中没有办法比较对象,甚至不能通过宽松相等==进行比较(见[相等运算符:=](ch09.html...一个字符串和一个数字,然后字符串转换为数字,并通过严格相等比较两个操作数。 1. 一个布尔值和一个非布尔值,然后布尔值转换为数字并进行宽松比较(再次)。 1....(参见转换为数字): > '\n\t123\r ' == 123 // usually not OK true > '' == 0 // 0 === 0 true 陷阱:宽松相等和对象 如果你一个对象一个非对象进行比较...如果两个操作数都是字符串,那么通过按字典顺序比较表示字符串的 JavaScript 字符的 16 位代码单元(参见第二十四章)来比较它们。 否则,两个操作数转换为数字并进行数字比较。...如果任一操作数是字符串,则将两者转换为字符串并返回结果的连接。 否则,两个操作数转换为数字,并返回结果的总和。

    30910

    【Java面试题系列】:Java基础知识面试题,看这一篇就够了

    3.2Integerint几种常用的比较场景: 1)两个new Integer()变量相比较,永远返回false Integer i = new Integer(100); Integer j = new...生成的Integer变量比较,如果两个变量的值在区间-128到127 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false。...,equals继承Object类; 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址; 诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容...StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况。...false 为什么返回false呢,我们看下Double.valueOf()方法,就知晓了: private final double value; public Double(double value

    48280

    【Java提高十二】hashCode()equals()

    如果我们所有属性进行散列,这必定会是一个糟糕的设计,因为对象的hashCode方法无时无刻不是在被调用,如果太多的属性参与散列,那么需要的操作数时间将会大大增加,这将严重影响程序的性能。...因为某些对象的hashCode可能会为负值,0x7FFFFFFF进行运算可以确保index为一个正数。...= v2[j++])return false;我们可以非常清晰的看到String的equals()方法是进行内容比较,而不是引用比较。至于其他的封装类都差不多。...4、一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。...=e2我们非常容易理解,因为他们不仅需要比较name,还需要比较id。但是p1即等于e1也等于e2,这是非常奇怪的,因为e1、e2明明是两个不同的类,但为什么会出现这个情况?

    77740

    int 和 integer :装箱和拆箱的过程,会用到什么方法,你觉得这个会对性能有影响吗,原因是什么(百度一面)

    3、拆箱装箱 在Java SE5之前,要进行装箱,可以通过以下代码: Integer i = new Integer(10); 4、自动拆箱自动装箱 自动装箱就是Java自动原始类型值转换成对应的对象...场景二、包装类型和基本类型的大小比较 有没有人想过,当我们对Integer对象基本类型进行大小比较的时候,实际上比较的是什么内容呢?...真":"假"); 可以看到,包装类基本数据类型进行比较运算,是先将包装类进行拆箱成基本数据类型,然后进行比较的。...= integer4"); } 我们普遍认为上面的两个判断的结果都是false。虽然比较的值是相等的,但是由于比较的是对象,而对象的引用不一样,所以会认为两个if判断都是false的。...在Java中,==比较的是对象应用,而equals比较的是值。 所以,在这个例子中,不同的对象有不同的引用,所以在进行比较的时候都将返回false

    2.6K20

    JavaSE的自动装箱和自动拆箱

    我们10【装箱】生成Integer对象。...:直接返回Integer内的数值 装箱操作:在i大于IntegerCache.low或者i小于IntegerCache.high时返回缓存的Integer对象,否则创建新的Integer对象。...原理想想大家也都明白: Boolean内部有true&false两个静态变量,最后装箱得到的值都是这两个静态变量的引用。...; } 在Java中我们知道操作"=="的两个数都是数据包装类型对象的引用的话,那么则是用来比较两个引用所指向的对象是不是同一个;而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程...因为第一次比较实际是先对数据进行拆箱然后比较,所以得到的结果是true;第二次比较实际是先拆箱(两个Integer对象拆箱)后装箱(拆箱且计算后的数据再装箱),然后同Long对象比较,显然不是同一类型所以得到

    45130

    面试官:重写 equals 时为什么一定要重写 hashCode?

    当我们对比两个对象是否相等时,我们就可以先使用 hashCode 进行比较,如果比较的结果是 true,那么就可以使用 equals 再次确认两个对象是否相等,如果比较的结果是 true,那么这两个对象就是相等的...例如,使用 Object 中的 equals 比较两个自定义的对象是否相等,这就完全没有意义(因为无论对象是否相等,结果都是 false)。...,Set 集合竟然没有二者进行去重合并。...3.4 原因分析 出现以上问题的原因是,如果只重写了 equals 方法,那么默认情况下,Set 进行去重操作时,会先判断两个对象的 hashCode 是否相同,此时因为没有重写 hashCode 方法...直接返回的结果就是 false两个对象不是相等的,于是就在 Set 集合中插入了两个相同的对象。​

    18.3K168

    详解 Java 中的自动装箱拆箱

    Boolean.TRUE : Boolean.FALSE; } 可以看到它并没有创建对象,因为在内部已经提前创建好两个对象,因为它只有两种情况,这样也是为了避免重复创建太多的对象。...,并且我们也可以看到 equal 的参数是一个 Object 对象,我们传入的是一个 int 类型,所以首先会进行装箱,然后比较,之所以返回 true,是由于它比较的是对象里面的 value 值。...1、当一个基础数据类型封装类进行 ==、+、-、*、/ 运算时,会将封装类进行拆箱,对基础数据类型进行运算。...)); //true 就说明了为什么最上面会返回 true....所以,当 == 运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。

    75800
    领券