Javascript angular.copy()和Object.assign()之间有什么区别?

Javascript angular.copy()和Object.assign()之间有什么区别?,javascript,angularjs,copy,clone,Javascript,Angularjs,Copy,Clone,我想知道是否有什么不同 我可以看到Object.assign()只是克隆了对象,这样做,无论我是否更改原始对象,克隆的对象都将保持其值 然而,我看到函数不是复制的,而是可枚举属性 angular.module('ui.bootstrap.demo',['ngAnimate','ngSanitize','ui.bootstrap']); angular.module('ui.bootstrap.demo')。controller('myCtrl',function($scope,$log){ $

我想知道是否有什么不同

我可以看到
Object.assign()
只是克隆了对象,这样做,无论我是否更改原始对象,克隆的对象都将保持其值

然而,我看到函数不是复制的,而是可枚举属性

angular.module('ui.bootstrap.demo',['ngAnimate','ngSanitize','ui.bootstrap']);
angular.module('ui.bootstrap.demo')。controller('myCtrl',function($scope,$log){
$scope.obj1={
prop1:()=>“一个字符串”,
提案2:[1,2,3],
prop3:新日期(),
建议4:{
a:1
}
};
$scope.obj2={
“$scope.obj1”:$scope.obj1,
“angular.copy Obj1”:angular.copy($scope.Obj1)
};
$scope.angularClone=angular.copy($scope.obj1);
$scope.es6clone=Object.assign({},$scope.obj1);
$scope.obj1.prop2=“newProp2”
$scope.obj1=“已销毁的obj1”;
});

obj1{{obj1}}

obj2{{obj2}}
angularClone{{angularClone}}
es6clone{{es6clone}

因此,主要区别在于angular.copy将执行深度复制,而Object.assign将不执行此操作。在您的示例中尝试运行以下代码:

$scope.angularClone = angular.copy($scope.obj1);
$scope.angularClone.prop4.a = 5;
$scope.obj1.prop4.a; // Will return 1


请参阅本文:我已经看到了,但是在代码片段中,您可以看到该行为与普通赋值不同
$scope.es6clone = Object.assign({}, $scope.obj1) ;
$scope.es6clone.prop4.a = 4;
$scope.obj1.prop4.a; // Will return 4 because object assign doesn't create deep copy.