I would like to know if there are any differences.
I can see that Object.assign() just clones the object, and doing so, no matter if I change the original object, the cloned object will maintain its values.
Nevertheless, I see that functions are not copied, only enumerable properties.
angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('myCtrl', function($scope, $log) {
$scope.obj1 = {
prop1: () => "a string",
prop2: [1, 2, 3],
prop3: new Date(),
prop4: {
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 = "destroyed obj1";
});
<!doctype html>
<html ng-app="ui.bootstrap.demo">
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-animate.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script>
</head>
<body>
<div ng-controller="myCtrl">
<h3>obj1</h3> {{obj1}}
<hr>
<h3>obj2</h3> {{obj2}}
<hr>
<h3>angularClone</h3> {{angularClone}}
<hr>
<h3>es6clone</h3> {{es6clone}}
<hr>
</div>
</body>
</html>