Загадка равенства объектов
Несмотря на одинаковые характеристики, два, казалось бы, идентичных объекта остаются неравными в JavaScript. Это явление многих озадачило, учитывая приведенный ниже фрагмент кода:
var a = {}; var b = {}; console.log(a==b); //returns false console.log(a===b); //returns false
Основные сведения об операторах равенства
Несоответствие между результатами обычных (==) и строгих (===) операторов равенства заключается в преобразовании типов . Обычное равенство выполняет неявное преобразование типов, а строгое равенство — нет. Однако в этом случае обе переменные являются объектами, поэтому преобразование типов не имеет значения.
Идентификация объекта
Сравнение объектов дает значение true только при сравнении одной и той же ссылки на объект, независимо от используемого оператора равенства. Другими словами, a == a, a == b (если b — псевдоним a), но a != c (если c — другой объект).
Выводы
Это уникальное поведение имеет значение для объектно-ориентированного программирования. Два объекта с одинаковыми свойствами, но разными ссылками считаются неравными, даже если они представляют одну и ту же реальную сущность.
Например, в базе данных два объекта представляют одного и того же человека с одинаковым именем, адресом и именем. номера телефонов не будут считаться одинаковыми, поскольку они имеют разные ссылки на объекты. Это может привести к путанице в результатах при сравнении объектов.
Решения
Если необходимо сравнить свойства двух объектов, рассмотрите возможность использования сторонней библиотеки или реализации пользовательская функция сравнения, которая проверяет каждое свойство индивидуально.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3