猿问
下载APP

为什么两个相同的物体不相等?

为什么两个相同的物体不相等?

下面的代码似乎应该返回一个true,但它返回false。

var a = {};
var b = {};

console.log(a==b); //returns false
console.log(a===b); //returns false

这有什么意义?


慕斯卡3215842
浏览 122回答 3
3回答

手掌心

唯一的区别是普通的(==)和严格(===)相等是严格相等运算符禁用类型转换。因为您已经在比较相同类型的两个变量,所以您使用的相等操作符的类型并不重要。无论您是使用常规等式还是严格相等,对象比较只能计算为true 如果你比较相同的物体.也就是说,给var a = {}, b = a, c = {};, a == a, a == b,但是a != c.两个不同的对象(即使它们都具有零或相同的确切属性)永远不会进行相等的比较。如果需要比较两个对象属性的相等性,这个问题有很好的答案。.

当年话下

这有什么意义?因为对象引用的“相等”,在==和===操作员纯基于引用是否引用同对象。这清楚地列在抽象等式比较算法(由==)和严格等式比较算法(由===).在你的代码中,当你说a==b或a===b,你不是在比较对象,您正在比较a和b查看它们是否引用同一个对象。这正是JavaScript的定义方式,也与在许多(但不是所有)其他语言中定义相等操作符的方式一致(Java,C#(除非操作符被重写,如是为了string],例如C+)。JavaScript没有内置的概念等价物,表示它们是否等效的对象之间的比较(例如,具有相同值的相同属性,如Java的Object#equals)。您可以在自己的代码库中定义一个,但是没有任何内在的定义。

慕姐829404

===,严格平等对象的运算符检查标识。如果两个对象引用同一个对象,则它们是严格相等的。这是两个不同的对象,所以它们是不同的。想想两页空纸。它们的属性是相同的,但它们并不是一回事。如果你在其中一个上写点什么,另一个就不会改变。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答