Javascript _.deepClone的对象,不等于旧对象?

Javascript _.deepClone的对象,不等于旧对象?,javascript,angularjs,cloning,Javascript,Angularjs,Cloning,我有一个用户对象,我想跟踪更改,以防用户编辑他们的信息,但是他们可以说“放弃更改”,并返回到加载时用户对象的先前状态 我的解决方案是将原始对象深度克隆到备份变量中,给它自己的参考点,然后将用户对象与备份对象进行比较——同样使用lodash 我使用angular#$watch和if!#观察对象。isEqual(用户、备份) $scope.$on'$routeChangeStart',(e,next)-> 如果。isEqual(用户、备份) console.log“所做的更改” 但是,即使没有更改

我有一个用户对象,我想跟踪更改,以防用户编辑他们的信息,但是他们可以说“放弃更改”,并返回到加载时用户对象的先前状态

我的解决方案是将原始对象深度克隆到备份变量中,给它自己的参考点,然后将用户对象与备份对象进行比较——同样使用lodash

我使用angular#$watch和if!#观察对象。isEqual(用户、备份)

$scope.$on'$routeChangeStart',(e,next)->
如果。isEqual(用户、备份)
console.log“所做的更改”

但是,即使没有更改,它也返回false?就好像这两个对象不再相等,即使所有的键和值都相同?我想发生的事情比我克隆时看到的要多


有更好的方法吗?我做错了什么?

问题很可能是
用户
被用户改变了。Angular为绑定到视图的对象添加了一些跟踪属性(这些属性以
$
$$
开头)。如果您的对象没有这样的“本机”属性,您可以尝试先对
用户
执行操作。

这是一个经典的例子,因为不变性的概念会有很大帮助。如果你的对象是不可变的,那么它的一个副本只意味着一个指向原始对象的指针,在我看来,比较会更加可靠。看看你是否想知道facebook为什么采用它(也许你自己也可以尝试使用它)。

你能为你的对象设置一个模式吗?你有没有尝试记录输出以了解它的不同之处?这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@本杰明:我知道它没有直截了当地解决这个问题,但它关注的是任何更好的方法?。