为什么{} == {}等于false?

3

关于JavaScript的一个简短问题。我尝试在JavaScript中执行{} == {},期望得到true,但实际上没有得到,我想了解为什么。难道不应该{} == {}返回true,而{} === {}返回false吗?


9
您可以直接将这个问题的标题复制进搜索引擎,就可以得到答案。 - user1531971
2个回答

4
因为=====检查的是所比较的两个变量是否是同一对象的引用,而不是它们的值是否相同。
因此,两个内部互相引用的变量或第三个变量都是=====,但两个新的对象实例则不是。
要检查两个对象是否相同,可以使用JSON.stringify()对它们进行序列化,然后检查结果是否相同。
大多数常用的JavaScript库都包含比较两个对象的函数,在原生JS中,你可以自己编写这样的函数:

Object.compare = function(obj1, obj2) {
  if (obj1 && obj2) return JSON.stringify(obj1) === JSON.stringify(obj2)
}

console.log(
    Object.compare({foo:"bar"}, {foo:"bar"})
);


那么在JavaScript中没有像其他语言中的.equals()函数一样检查内容的功能吗? - Mario S
不是,但很多库包括这样的功能;例如jQuery或underscore。 - Luca Kiebel
2
@MarioS 我所知道的来自C#或Java的Object.Equals()方法,也会检查对象引用(除非你重写了它)。 - Pac0

1

当使用 === 比较两个对象时,将会检查它们的引用。

这不是对同一个对象的两个引用,而是两个空对象的不同实例。

当使用 == 进行比较时,通常会在比较之前进行一些强制类型转换,遵循特定的规则,这些规则过于复杂,无法在此列出。

但长话短说,由于你正在比较两个对象,所以不会有不同的检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接