Два «равных» объекта JavaScript не равны

0

В угловом приложении я сравниваю два объекта (исходный объект с текущим объектом после внесения пользователем изменений). Проблема в том, что два объекта не равны - даже до внесения каких-либо изменений. При отладке в браузере оба объекта выглядят точно так же. Ниже я попробовал angular.equals() но comparison оценивается как false:

ChangeTracker.protype.hasChanged = function (current) { 
  var comparison = angular.equals(this.original, current);    
  return !comparison;  
};  

Я также пробовал Underscore _.isEqual а также обычные (==) и строгие (===) операторы равенства.

Я думал, что могу сравнивать по ссылке, но даже когда я обертываю объекты в JSON.parse(JSON.stringify()) сравнение все равно возвращает false.

Почему еще два одинаково одинаковых объекта не равны?

  • 0
    Два разных объекта никогда не «равны», если они буквально не являются одним и тем же объектом. не равные свойства, но один и тот же объект.
  • 1
    имейте в виду, console.log() выполняется асинхронно, поэтому, если контрольная точка, которой назначена переменная, изменяется до завершения console.log, она выводит самую последнюю версию. Можете ли вы сделать жесткий клон и вывести клон в каждом из мест, где вы записывали консоль? Вот простая функция для этого: var hard_clone = function(obj) { if (null === obj || "object" !== typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; } return copy; };
Показать ещё 3 комментария
Теги:
underscore.js

1 ответ

3

Похоже на опечатку в вашем коде, вы хотели вернуть значение сравнения?

ChangeTracker.protype.hasChanged = function (current) { 
  var comparison = angular.equals(this.original, current);    
  return !compare;  
}; 

Похоже, это должно было быть:

return !comparison

  • 0
    Я согласен с вашим ответом.
  • 0
    Виноват. К сожалению, это не проблема, хотя. Просто ошибка при копировании в пост.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню