【发布时间】:2018-10-17 05:31:23
【问题描述】:
关于 javascript 的简短问题。我尝试在 javascript 中执行 {} == {} 并希望得到正确,但它没有,我想了解原因。 {} == {}不应该返回true而{} === {}返回false吗?
【问题讨论】:
-
您可以直接将这个问题的标题放到网络搜索中并获得答案。
标签: javascript equals-operator
关于 javascript 的简短问题。我尝试在 javascript 中执行 {} == {} 并希望得到正确,但它没有,我想了解原因。 {} == {}不应该返回true而{} === {}返回false吗?
【问题讨论】:
标签: javascript equals-operator
因为== 和=== 检查两个比较变量是否是对同一个对象的引用,而不是它们的值是否相同。
因此,两个内部相互引用的变量或第三个变量都是== 和===,而对象的两个新实例则不是。
要检查两个对象是否相同,您可以JSON.stringify() 他们并检查结果是否相同。
大多数常见的 JavaScript 库都包含一个比较两个对象的函数,在 vanilla JS 中你可以自己制作这样一个函数:
Object.prototype.compare = function (objectB) {
if(this && objectB) return JSON.stringify(this) === JSON.stringify(objectB)
}
console.log({}.compare({}));
【讨论】:
当用 === 比较两个对象时,将检查引用。
这些不是对相同对象的两个引用,它们是空对象的两个不同实例。
与 == 进行比较时,通常可能会在比较之前对某些常见类型进行强制转换,遵循的特定规则过于复杂,无法在此列出。
但长话短说,由于您正在比较两个对象,因此不会有不同的检查。
【讨论】: