为什么具有相同值的两个对象不相等?

时间:2014-04-03 05:10:46

标签: javascript object equals

我在控制台中运行以下内容为什么输出为false。不问如何比较两个对象,但为什么这两个对象不相同。

> a = {same:'same'}
Object {same: "same"}
> b = {same:'same'}
Object {same: "same"}
> a === b
false
> a == b
false

3 个答案:

答案 0 :(得分:3)

两个对象永远不会相同,即使它们具有相同的内容,因为Object的两个不同实例永远不会相等。

当比较两个对象时,JavaScript比较内部引用,只有当两个操作数引用内存中的同一个对象时才会相等,因此不检查键和值,因此对象的内容并不重要,操作数都是必须引用同一个对象才能在比较中返回true。

答案 1 :(得分:1)

这仅仅是因为根据The Abstract Equality Comparison Algorithm定义了==

  

1。如果Type(x)与Type(y)相同[即键入(x)== Type(y)== Object],然后..

     

1.f。如果 x和y引用同一对象,则返回true 。否则,返回false。

其他规则/转换的

适用,因为两个操作数都是对象。

虽然没有ECMAScript第5版"核心"支持这项任务,How to determine equality for two JavaScript objects?

中讨论了几种解决方案

这与&#34;引用&#34;无关,它们是ECMAScript中定义的的实现细节,可以根据上述规则进行全面讨论:两个不同的对象< em> never 相等于==(以及===}扩展规则。

答案 2 :(得分:0)

您正在比较两个永远不相等的对象。如果你比较a.same和b.same那么它们将是相同的。