如何在 JavaScript 中比较对象

2025年2月16日 | 4 分钟阅读

在 JavaScript 中,根据你想要实现的目标,有不同的方法可以比较对象。以下是一些你可以在 JavaScript 中用于比较对象的方法:

== 和 === 运算符

== 和 === 运算符用于比较两个对象的。== 运算符比较两个对象的,而 === 运算符比较两个对象的类型

例如

输出

false
false

在这个例子中,即使 obj1obj2 具有相同的属性和值,它们也不相等,因为它们是不同的对象。

Object.is() 方法

Object.is() 方法比较两个对象是否相等。如果对象相等,则返回 true;如果不相等,则返回 false。Object.is() 方法类似于 === 运算符,但对一些特殊情况(如 NaN-0)的处理方式不同。

例如

输出

false

在此示例中,Object.is() 返回 false,因为 obj1 和 obj2 不是同一个对象。

JSON.stringify() 方法

JSON.stringify() 方法将一个对象转换为字符串。如果两个对象具有相同的属性和值,则它们生成的字符串将是相同的。你可以通过将两个对象转换为字符串并比较这些字符串来比较它们。

例如

输出

true

在此示例中,JSON.stringify() 用于将 obj1 和 obj2 转换为字符串,然后比较这些字符串。

自定义比较函数

如果你有特定的对象比较要求,可以定义一个自定义比较函数。例如,你可能希望根据属性或值的特定顺序来比较对象。在这种情况下,你可以定义一个函数,该函数以两个对象作为参数,并返回一个值来指示它们的顺序。

例如

输出

-1

在此示例中,compareObjects() 是一个自定义函数,它根据 a 属性比较两个对象。如果 obj1.a 小于 obj2.a,则函数返回 -1;如果 obj1.a 大于 obj2.a,则返回 1;如果它们相等,则返回 0。

手动比较

读取属性并手动比较它们是基于内容比较事物的直接方法。

让我们创建一个名为 isHeroEqual() 的自定义函数来比较两个 hero 实例。

例如

输出

true
false

isHeroEqual() 读取两个对象属性的名称并比较它们的值。

如果被比较的对象有几个特征,我们倾向于构建 isHeroEqual 这样的比较函数。这些函数运行良好,因为比较中使用的属性访问器和相等性运算符不多。

对于基本对象,手动提取属性不是问题。手动比较需要这样做。但是,当比较较大的对象(或结构未知的对象)时,手动比较很麻烦,因为它需要编写大量样板代码。

第三方库

最后,有许多第三方库提供了更高级的对象比较功能。一些流行的库包括 Lodash、UnderscoreRamda。这些库提供了广泛的实用函数,可用于以各种方式比较对象,例如深度比较、按值相等性比较以及根据特定属性比较对象。例如,在 Lodash 中,你可以使用 isEqual() 函数进行比较。

总结

如果操作数是不同的对象实例,可以使用引用相等性(使用 ===、== 或 Object.is())来显示。

手动相等性检查需要手动比较属性的值。尽管此检查需要手动写出要比较的属性,但我们喜欢此方法简单。如果被比较的对象具有许多属性,或者对象的结构是在运行时确定的,则执行浅检查是一种更优策略。最后,如果被比较的对象包含嵌套对象,则应使用深度相等性检查。