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

如何确定两个JavaScript对象的相等性?,第1张

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

简短的答案

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

长答案

该概念是一种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的任何两个实例是否相等,仅
a
b
是否重要并不重要。在某些情况下
c
,实例之间可能会有所不同,但在比较期间并不显着。

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

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

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

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

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



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4921408.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-12

发表评论

登录后才能评论

评论列表(0条)

    保存