Не забывайте о порядке ключей

Равенство в JavaScript - один из самых запутанных аспектов, который заставит вас почесать в затылке. В отличие от других языков, где вы могли бы подумать, что оператор равенства == или === будет вести себя должным образом, но, к вашему удивлению, это не так.

Поскольку объекты являются ссылочными типами, вы не можете использовать обычные операторы равенства, то есть == или ===.

Как же тогда проверять объекты на равенство? Есть несколько подходов, которые вы можете предпринять (проверьте в конце статьи), но в этой статье основное внимание уделяется тому, почему вам не следует использовать JSON.stringify.

Почему не JSON.stringify?

JSON.stringify кажется наиболее очевидным и простым выбором для сравнения, поскольку не требуется никакой внешней зависимости.

Но подождите! Это не так просто, как кажется, судя по названию, этот метод сначала преобразует объекты в строки, а затем выполняется сравнение.

JavaScript не гарантирует порядок ключей. Пример:

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

Заключение

Хотя он работает без установки библиотек или пакетов из npm, JSON.stringify, безусловно, не лучший вариант для сравнения объектов.

Альтернативы для сравнения

У сообщества JavaScript есть и другие методы для сравнения объектов:

Ресурсы