关于javascript的简短问题。我尝试在javascript中执行{} == {}
并期望得到真实,但它没有,我想了解原因。我不应该{} == {}
返回true并且{} === {}
返回false吗?
答案 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的两个引用,它们是空对象的两个不同实例。
当与==进行比较时,在比较之前,通常可能会对某些常见类型进行一些强制,遵循过于复杂而无法在此列出的特定规则。
但长话短说,因为你比较两个对象,所以不会有不同的检查。