【问题标题】:Why does {} == {} equals false? [duplicate]为什么 {} == {} 等于 false? [复制]
【发布时间】:2018-10-17 05:31:23
【问题描述】:

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

【问题讨论】:

  • 您可以直接将这个问题的标题放到网络搜索中并获得答案。

标签: javascript equals-operator


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 那么在javascript中没有其他语言中的.equals()这样的函数来检查内容吗?
  • 没有,但是很多库都包含这样的功能;例如 jQuery 或下划线。
  • @MarioS 我从 C# 或 Java 知道的 Object.Equals() 也会检查对象引用(除非你覆盖它)
【解决方案2】:

当用 === 比较两个对象时,将检查引用。

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

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

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

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    相关资源
    最近更新 更多