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

标签 javascript object equality

<分区>

我知道在 SO 上有类似的问题,但没有一个能提供我正在寻找的答案。

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

enter image description here

我知道这与规范中 JavaScript 的定义方式有关,但为什么会这样?这是违反直觉的。

如果 ("string"=== "string") 结果为 true,那么为什么 ({ } === { } ) 结果为真?

我在某处看到平等算法被设计为类似于 C++ 或 C# 的算法,但这就像发明一种全新的引擎,使用 1/10 的燃料,而不是纯粹为了与其他汽车保持一致。

为什么 JavaScript 是这样定义的?这个决定背后有什么原因吗?或者只是为了让人看到它在做已完成的事情?

最佳答案

{}是在 javascript 中创建对象的文字。那就是你可以替换

var obj = new Object();

var obj = {};

所以任何时候你使用{}您正在创建一个新对象。

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

但是==运算符(operator)不会检查属性。它检查两个对象是否指向相同的对象/引用。

鉴于

var obj1 = {};
obj2 = obj1;
console.log(obj2 == obj1); //returns true

返回 true 因为 obj1 和 obj2 指向相同的引用。

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

关于Javascript:为什么两个对象不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299889/

相关文章:

javascript - 出于 (A)GPL 的目的,require()-ing node.js 中的库是否使我的代码成为 "derived work"?

Java方法重写equals方法

Haskell 矩阵相等失败

floating-point - 测试两个 float 是否为零,无需多次测试

JavaScript 已禁用 - 相关下拉列表

javascript - 在 Angular 中声明 2 个应用程序不起作用

javascript - extjs 6.0 sencha cmd 仅编译我的 javascript 代码

javascript 如何将数组转换为对象

java - ArrayList.add 有效,但 ArrayList.remove 无效

groovy - 在 Groovy 中,为什么 '==' 的行为对于扩展 Comparable 的接口(interface)会发生变化?