Как проверить, равны ли два объекта?

В большинстве строго типизированных языков, таких как Java, функция isEquals() используется для проверки совпадения двух объектов. У вас может возникнуть соблазн просто использовать оператор ==, чтобы проверить, являются ли два объекта одинаковыми в JavaScript.

Однако это не будет оцениваться как true.

var o1 = {};
var o2 = {};
o1 == o2   // returns false 
o1 === o2  // returns false

Хотя эти объекты эквивалентны (одинаковые свойства и значения), они не равны. А именно переменные имеют разные адреса в памяти. то есть, поскольку большинство из нас уже знает, что объекты имеют ссылочный тип, что означает, что имя переменной в этом случае o1 и o2 являются заданной ссылкой или указателем на это значение.

Ссылка или указатель указывает на место в памяти, где хранится объект. Переменная на самом деле не хранит значение. И поэтому, когда мы проверяем o1 == o2 или o1 === o2, сравнивается не значение, а их ссылка на адрес памяти! И хотя оба объекта пусты, оба имеют разные адреса памяти и, следовательно, никогда не будут оцениваться как «истина».

Вот почему большинство приложений JavaScript используют служебные библиотеки, такие как 'lodash' или 'underscore', которые имеют функцию isEqual(object1, object2) для строгой проверки двух объектов или значений. . Это происходит за счет реализации некоторой проверки на равенство на основе свойств, когда сравнивается каждое свойство объекта.

В этом примере каждое свойство сравнивается для достижения точного результата равенства объектов.

Однако это по-прежнему будет работать для объектов, которые имеют только строку или число в качестве свойства, т. е. это не будет работать для вложенных объектов.

var function1 = function(){console.log(2)};
var function2 = function(){console.log(2)};
console.log(function1 == function2); // prints 'false'

Хотя эти две функции выполняют одну и ту же операцию, функции имеют разные адреса в памяти, поэтому оператор равенства возвращает false. Примитивные операторы проверки на равенство == и === можно использовать только для строк и чисел. Чтобы реализовать проверку эквивалентности для объектов, необходимо проверить каждое свойство в объекте.

Однако есть способ проверить эквивалентность двух вложенных объектов! Вот небольшой лайфхак, в котором мы можем использовать метод JSON.stringify().

Итак, теперь вы знаете, как проверить, равны ли 2 объекта или нет!

Поставьте палец вверх, если статья оказалась вам полезной. Здоровья!