javascript 没有 isEqual() 本机函数来比较对象是否有特定原因?

Is there a specific reason why javascript has no isEqual() native function to compare Objects?

object1 == object2 操作检查引用是否相同。

很多时候我们想检查对象结构(属性、值甚至方法)是否相同。我们必须自己实现一个 isEqual() 函数或使用外部库。

为什么它不像 JSON.stringify() 那样直接添加到 javascript ECMA 标准中?

有没有具体原因?

据我所知,这还没有实现,因为对象可以有非常不同的结构,并且只在非常简单的对象结构中由 name:value 组成,比如 obj = {name:"value",age="anotherValue"} isEqual(obj1,obj2 ) 会有用。

虽然我觉得还是应该实施。

很可能是因为没有明显的方法可以确定究竟是什么使两个对象相等。

例如,您可以检查它们是否具有相同的 属性 名称和相同的值。然而,

  • 这些值可以是对象,是否应该松散地递归检查它们的相等性?那么,循环引用应该怎么办呢?
  • 应该只检查可枚举属性,还是检查所有属性?
  • 应该只检查字符串属性,还是检查符号?
  • 应该只检查属性,还是检查内部插槽?
  • 如果没有检查所有内部插槽,那么检查哪些?例如,应该比较普通对象中的 [[Prototype]] 值,还是调用 [[GetPrototypeOf]] 方法?是否应该比较所有函数内部槽,否则您将如何确定函数相等性?
  • 应该只比较属性值,还是比较可配置性、可写性和可枚举性?
  • 存取器属性呢?应该调用 getter 并比较 returned 值,还是比较 getter 和 setter 本身?
  • 代理对象呢,您每次询问它们时可能 return 一组不同的属性?

这些问题没有最佳答案。对于每个人来说,对象相等可能意味着不同的事情。因此他们可以编写一个函数来准确检查他们想要的内容。