如何比较JavaScript中的两个对象?

对象不像数组或字符串。因此,仅通过使用 “ ===”  “ ==”进行比较是不可能的。为了进行比较,我们必须首先对对象进行字符串化,然后使用 相等运算符比较对象。 

在下面的示例中,对象首先被 stringified(),然后彼此比较。

示例

<html>
<body>
   <script>
      const obj1 = {Name: "Rahim", City: 'Hyderabad',Country: "India" };
      const obj2 = {Name: "Rahim", City: 'Hyderabad',Country: "India" };
      document.write(JSON.stringify(obj1) === JSON.stringify(obj2));
   </script>
</body>
</html>

输出结果

true

如果我们看下面的示例,即使重复了相同的属性,它们的顺序也不同。在这种情况下,对象比较将导致错误 ,如输出所示。

示例

<html>
<body>
   <script>
      const obj1 = {Name: "Rahim", City: 'Hyderabad', Country: "India" };
      const obj2 = {Name: "Rahim", Country: "India", City: 'Hyderabad', };
      document.write(JSON.stringify(obj1) === JSON.stringify(obj2));
   </script>
</body>
</html>

输出结果

false

因此,为了克服此缺点,引入了一个名为“ lodash ”的JavaScript库。它检查键/值对是否相等,但顺序不相等。 

示例

在下面的示例中,lodash的“ _isEqual()”属性用于比较javascript对象。    

<html>
<head>
   <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>
</head>
<body>
   <script>
      const obj1 = {Name: "Rahim", City: 'Hyderabad', Country: "India" };
      const obj2 = {Name: "Rahim", Country: "India", City: 'Hyderabad', };
      document.write(JSON.stringify(obj1) === JSON.stringify(obj2));
      document.write("</br>");
      document.write(_.isEqual(obj1, obj2));
   </script>
</body>
</html>

输出结果

false
true