我在控制台中运行以下内容为什么输出为false。不问如何比较两个对象,但为什么这两个对象不相同。
> a = {same:'same'}
Object {same: "same"}
> b = {same:'same'}
Object {same: "same"}
> a === b
false
> a == b
false
答案 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那么它们将是相同的。