В угловом приложении я сравниваю два объекта (исходный объект с текущим объектом после внесения пользователем изменений). Проблема в том, что два объекта не равны - даже до внесения каких-либо изменений. При отладке в браузере оба объекта выглядят точно так же. Ниже я попробовал 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.
Почему еще два одинаково одинаковых объекта не равны?
Похоже на опечатку в вашем коде, вы хотели вернуть значение сравнения?
ChangeTracker.protype.hasChanged = function (current) {
var comparison = angular.equals(this.original, current);
return !compare;
};
Похоже, это должно было быть:
return !comparison
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; };