当前位置: 首页 > 面试题库 >

如何确定两个JavaScript对象的相等性?

益锦程
2023-03-14
问题内容

严格的相等运算符将告诉您两个对象 类型 是否相等。但是,有没有办法判断两个对象是否相等, 就像 Java中 的哈希码
一样

与这个问题相似,但需要更多的学术答案。上面的场景演示了为什么必须要有一个,而我想知道是否有任何 等效的解决方案


问题答案:

简短的答案

简单的答案是:不,没有通用的方法可以确定一个对象是否与您所指的含义相等。例外是,当您严格考虑对象是无类型的时。

长答案

该概念是一种Equals方法的概念,该方法比较对象的两个不同实例以指示它们在值级别上是否相等。但是,由特定类型决定如何Equals实现方法。具有原始值的属性的迭代比较可能还不够,可能存在一些不被视为对象值一部分的属性。例如,

 function MyClass(a, b)
 {
     var c;
     this.getCLazy = function() {
         if (c === undefined) c = a * b // imagine * is really expensive
         return c;
     }
  }

在上述情况下,c确定MyClass的任何两个实例是否相等,仅ab是否重要并不重要。在某些情况下c,实例之间可能会有所不同,但在比较期间并不显着。

请注意,当成员本身也可能是类型的实例,并且每个成员都必须具有确定相等性的方法时,就会出现此问题。

更为复杂的是,在JavaScript中,数据和方法之间的区别变得模糊。

一个对象可以引用一个被称为事件处理程序的方法,而这可能不被认为是其“值状态”的一部分。尽管可以很好地为另一个对象分配执行重要计算的功能,从而使该实例与其他实例有所不同,仅仅是因为它引用了一个不同的功能。

如果某个对象的现有原型方法之一被另一个函数覆盖,那该怎么办?还是可以认为它等同于另一个实例,在其他方面相同吗?对于每种类型,只能在每种特定情况下回答该问题。

如前所述,该异常将是严格无类型的对象。在这种情况下,唯一明智的选择是每个成员的迭代和递归比较。即使这样,也必须问一个函数的“值”是什么?



 类似资料:
  • 本文向大家介绍如何判断两个对象相等?相关面试题,主要包含被问及如何判断两个对象相等?时的应答技巧和注意事项,需要的朋友参考一下 提供另一种写法: 当然JSON.stringify(obj)==JSON.stringify(obj)执行速度是最快的

  • 问题内容: 新的ES 6(和谐)引入了新的Set对象。Set使用的身份算法类似于运算符,因此不太适合比较对象: 如何自定义Set对象的相等性以进行深层对象比较?有没有像Java一样的东西? 问题答案: ES6 对象没有任何比较方法或自定义比较可扩展性。 的,而方法只关闭它是一个基本相同的实际物体或相同的值,没有办法插头插入或更换只是逻辑。 你大概可以从派生您自己的对象和替换,并与一些做了深刻的对象

  • 本文向大家介绍JavaScript比较两个对象是否相等的方法,包括了JavaScript比较两个对象是否相等的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript比较两个对象是否相等的方法。分享给大家供大家参考。具体如下: 在Python中可以通过cmp()内建函数来比较两个对象所包涵的数据是否相等(数组、序列、字典)。但是在javascript语言中并没有相关的实现。

  • 问题内容: 在java中如何比较两个对象是否相等?何时使用equals和hashcode? 问题答案: 理论(针对语言律师和数学倾向者): (javadoc)必须定义一个等价关系(它必须是自反的,对称的和可传递的)。另外,它必须是一致的(如果未修改对象,则它必须保持返回相同的值)。此外,必须始终返回false。 (javadoc)也必须是一致的(如果未根据修改对象equals(),则它必须保持返回

  • 本文向大家介绍sitecore 确保两个值相等,包括了sitecore 确保两个值相等的使用技巧和注意事项,需要的朋友参考一下 示例 比较两个值是否相等。它只能比较字符串,整数和布尔值。            

  • 问题内容: Hashcode()和equals()的概念是 1)如果两个对象根据equal()相等,则在这两个对象中的每一个上调用hashcode方法应产生相同的哈希码。 另一个是 2)如果两个对象根据equal()不相等,则不需要在两个对象中的每一个上调用hashcode方法必须产生不同的值。 我尝试并理解了第一个,这是第一点的代码。 上面的程序为两个不同的对象提供了相同的哈希码。 有人可以用一