Javascript:为什么两个对象不相等?

the*_*dev 2 javascript equality object

我知道在SO上有类似的问题,但没有一个能提供我想要的答案.

在JavaScript中,如果执行以下操作,结果将为false:

在此输入图像描述

我知道这与规范中如何定义JavaScript有关,但为什么会这样呢?这是违反直觉的.

如果("string" === "string")结果存在true,那为什么不会({ } === { })导致真实?

我在某处看到,等式算法被设计成类似于C++或C#,但这就像发明了一种全新的引擎,它使用了十分之一的燃料而不是纯粹用于与其他汽车保持一致.

为什么JavaScript以这种方式定义?这个决定背后有原因吗?或者只是因为它看到做完成的事情?

raj*_*uGT 6

{}是一个在javascript中创建对象的文字.那是你可以替换的

var obj = new Object();
Run Code Online (Sandbox Code Playgroud)

var obj = {};
Run Code Online (Sandbox Code Playgroud)

因此,只要您使用它,{}就会创建一个新对象.

您提到的行{} == {}创建了两个不同的对象,并且都没有属性.它们是相同的,就像你有equals(obj1, obj2)比较obj1和obj2属性的方法一样,如果两个对所有属性都有相同的值,它应该返回true.

但是==运营商不会检查属性.它检查两个对象是否都指向同一个对象/引用.

var obj1 = {};
obj2 = obj1;
console.log(obj2 == obj1); //returns true
Run Code Online (Sandbox Code Playgroud)

返回true,因为obj1和obj2指向同一个引用.

最后,关于string "abc" == "abc",here ==运算符查找实际的字符串内容并根据它返回true/false.