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

时间:2018-05-07 11:58:03

标签: javascript equals-operator

关于javascript的简短问题。我尝试在javascript中执行{} == {}并期望得到真实,但它没有,我想了解原因。我不应该{} == {}返回true并且{} === {}返回false吗?

2 个答案:

答案 0 :(得分:2)

因为=====检查两个比较变量是否是对同一对象的引用,而不是它们的值是否相同。

因此,内部引用彼此或第三个变量的两个变量都是=====,而对象的两个新实例则不是。

要检查两个对象是否相同,您可以JSON.stringify()它们并检查结果是否相同。

JavaScript的大多数常见库都包含一个比较两个对象的函数,在vanilla JS中你可以为自己创建这样一个函数:

Object.prototype.compare = function (objectB) {
  if(this && objectB) return JSON.stringify(this) === JSON.stringify(objectB)
}

console.log({}.compare({}));

答案 1 :(得分:1)

将两个对象与===进行比较时,将检查引用。

这些不是对同一个obejct的两个引用,它们是空对象的两个不同实例。

当与==进行比较时,在比较之前,通常可能会对某些常见类型进行一些强制,遵循过于复杂而无法在此列出的特定规则。

但长话短说,因为你比较两个对象,所以不会有不同的检查。