为什么 {} == {} 是 false,但是 {} + {} == {} + {} 是 true

在 JavaScript 中,对象都是通过引用来进行比较的。这意味着,如果您创建了两个不同的对象,即使它们看起来相同,它们也是不相等的。例如:

----- ---- - ---
----- ---- - ---
---------------- --- ------ -- --- -----

在这里,obj1obj2 都是空对象,但是它们是通过两个不同的引用来创建的,因此它们是不相等的。

那么,为什么 {} == {} 是 false 呢?

在 JavaScript 中,如果比较两个对象,使用双等号(==)进行比较时,JavaScript 引擎会将它们转换为原始类型值,然后再进行比较。对于对象来说,它们被转换为字符串 "[Object object]",所以当你比较两个对象时,它们永远不会相等,因为它们代表的是不同的引用地址。

-------------- -- ---- -- --- -----
------------------------------------------------ -- --- ------- -------

接下来,让我们看一下第二个奇怪的比较:{} + {} == {} + {},它的结果竟然是 true。

这是因为在 JavaScript 中,加法操作符不仅可以用于数字,还可以用于字符串。当在对象上使用加法操作符时,会自动将它们转换为字符串并进行字符串拼接。

因此,{} + {} 实际上被转换为了字符串 "[object Object][object Object]",而 {} + {} == {} + {} 就相当于比较两个相同的字符串,所以结果是 true。

-------------- - ---- -- --- ------- -------------- -------
-------------- - -- -- -- - ---- -- --- ----

然而,这种比较方式可能会导致一些意想不到的结果,因为字符串拼接的顺序是从左到右的。例如:

------------- - - - ----- -- --- ----
--------------- - - - --- -- --- -----

因此,在使用加法操作符时,一定要注意数据类型和运算顺序。

总结一下,当你比较两个对象时,应该使用三等号(===)进行比较。同时,当你使用加法操作符时,要注意其会自动转换为字符串并进行字符串拼接,需要注意数据类型和运算顺序。

希望本文对你有所帮助!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/31110