JavaScript中的值很简单。您只需要使用平等的计算符号即可。例如,严格的计算符号:
但是该对象具有结构化的数据,因此更难比较。在本文中,您将学习如何正确比较JavaScript中的对象。
JavaScript提供了3种比较值的方法:
当比较对象与上述任何方法进行比较时,比较的结果仅由比较值引用。这是指相等的性质。
让我们定义对象,并在实际情况下查看参考的平等性质:
计算结果是因为两个操作都指向同一对象实例。
另一方面,计算结果是因为它是不同的对象示例。
有趣的是,对象的内容是相同的:两个对象都有一个属性,并且其值是。尽管如此,即使相同结构的对象更多,结果也是结果。
当您要比较对象引用而不是其内容时,这很有用。但是在更多情况下,您想比较对象的实际内容:例如,属性及其值。
接下来,查看如何将对象与对象相等的对象进行比较。
比较对象的最直接方法是读取属性并手动比较它们。
例如,让我们写一个特殊功能以比较两个英雄对象:
访问两个对象的属性并比较其值。
如果您有一些比较的属性,我更喜欢编写比较功能,例如。这种函数类型具有良好的性能:在比较中,只会涉及少数属性访问者和平等运算符。
手动比较需要手动提取属性。对于简单的对象,这不是问题。但是,比较大型对象(或未知对象)是不便的,因为它需要大量的模型代码。
因此,让我们看一下物体的浅层层有什么帮助。
如果使用浅比较检查对象,则必须获取两个对象的属性列表(使用),然后检查其属性值是否相等。
以下代码是实施浅层比较的一种方式:
在函数内部以及包含和属性名称的数组中。
使用循环遍历钥匙并比较每个属性。
使用浅层,您可以轻松地检查具有许多属性的对象:
返回,因为对象是相同的属性(和),并且值是相同的。
另一方面,由于不同的属性,它将返回。
但是JavaScript中的对象可以嵌套。在这种情况下,浅层不能扮演好角色。
让我们检查对象与嵌套对象的浅层比较:
这次,即使两个对象具有相同的内容,它们也会返回。
发生这种情况是因为嵌套对象和不同的对象实例。因此,浅层比较了两个不同的值。
解决嵌套对象的问题需要进行深入比较。
深度比较类似于浅层层。区别在于,当属性包含对象时,嵌套对象将被递归执行浅层层。
看看深入比较的实现:
一旦第13行中检查的属性是对象,递归调用将开始验证嵌套对象是否相等。
现在使用更嵌套的对象:
深度比较函数可以正确确定其是否具有相同的属性和值,包括嵌套对象和相等的性质。
是平等的)。
引用平等性质(使用或)来确定操作数量是否为同一对象实例。
如果手动检查对象相等,则需要手动比较属性值。尽管这种类型的检查需要手动编码来比较属性,因为它很简单,但此方法很方便。
当比较对象在运行时具有许多属性或对象的结构时,更好的方法是使用浅检查。
如果比较对象具有嵌套对象,则应在深度比较检查中进行。