【发布时间】:2020-04-14 08:53:27
【问题描述】:
在 ECMA 规范中,我们读到 Array.prototype.includes 在比较数组是否包含给定元素时使用 SameValueZero 算法。
这个算法,当元素是一个对象时,它使用SameValueNonNumeric算法,它基本上检查比较元素的类型是否匹配,最后,在算法的最后一点检查:
如果 x 和 y 是相同的 Object 值,则返回 true。否则,返回 false。
我的问题:
SameValueNonNumeric 算法如何执行对象比较步骤?它如何确定“x 和 y 是相同的对象值”?我在规格中找不到这个。
【问题讨论】:
-
基本上是
a === b- 他们字面意思是不是同一个对象。 -
它对每种情况都非常重要。您如何与一般物体进行比较?如果 2 个对象指向同一个实例或者它们具有相同的属性?没有普遍的答案。所以更好的问题应该是你为什么需要它?我觉得比较对象总是表明一种不好的方法。只是我个人的看法。
-
@Aaron 感谢您的评论,我认为您成功了。我想用这个函数来确定文档(对象)列表中是否已经存在具有相同内容的对象。似乎这是一种不好的方法,通过一些唯一的 id 查找对象会更好。最初我认为“包含”会进行如此“深入”的逐个属性比较。
-
有时你必须听取别人的意见才能重新思考你的设计。很高兴它为您指明了正确的方向:)
标签: javascript arrays javascript-objects