为什么 {} == {} 等于 false?
Why does {} == {} equals false?
关于 JavaScript 的简短问题。我试图在 JavaScript 中执行 {} == {}
并期望得到 true
,但它没有,我想了解为什么。 {} == {}
return true
和 {} === {}
return false
不应该吗?
当使用 === 比较两个对象时,将检查引用。
这不是对同一对象的两个引用,而是一个空对象的两个不同实例。
与==比较时,通常在比较之前可能会对某些常见类型进行一些强制转换,遵循过于复杂而无法在此处列出的特定规则。
但长话短说,因为您是在比较两个对象,所以不会有不同的检查。
因为==
和===
检查两个比较变量是否是对同一对象的引用,而不是它们的值是否相同。
因此内部相互引用的两个变量或第三个变量都是==
和===
,一个对象的两个新实例不是。
要检查两个对象是否相同,您可以 JSON.stringify()
它们并检查结果是否相同。
JavaScript 的大多数常用库都包含比较两个对象的函数,在 vanilla JS 中,您可以自己创建这样的函数:
Object.prototype.compare = function (that) {
if(this && that) return JSON.stringify(this) === JSON.stringify(that)
}
console.log({}.compare({}));
关于 JavaScript 的简短问题。我试图在 JavaScript 中执行 {} == {}
并期望得到 true
,但它没有,我想了解为什么。 {} == {}
return true
和 {} === {}
return false
不应该吗?
当使用 === 比较两个对象时,将检查引用。
这不是对同一对象的两个引用,而是一个空对象的两个不同实例。
与==比较时,通常在比较之前可能会对某些常见类型进行一些强制转换,遵循过于复杂而无法在此处列出的特定规则。
但长话短说,因为您是在比较两个对象,所以不会有不同的检查。
因为==
和===
检查两个比较变量是否是对同一对象的引用,而不是它们的值是否相同。
因此内部相互引用的两个变量或第三个变量都是==
和===
,一个对象的两个新实例不是。
要检查两个对象是否相同,您可以 JSON.stringify()
它们并检查结果是否相同。
JavaScript 的大多数常用库都包含比较两个对象的函数,在 vanilla JS 中,您可以自己创建这样的函数:
Object.prototype.compare = function (that) {
if(this && that) return JSON.stringify(this) === JSON.stringify(that)
}
console.log({}.compare({}));