当source是Array时,angular.copy()返回Object

时间:2016-09-06 17:18:06

标签: javascript angularjs arrays

我想使用arguments在日志记录功能中创建angular.copy()的副本。

由于arguments已经是一个数组,我希望得到一个数组,但它返回的是Object而不是Array。

$scope.log = function(argN) {
    console.log("arguments", arguments, angular.copy(arguments));
    if (typeof(console) !== 'undefined') {
        console.log.apply(console, angular.copy(arguments));
    }
}
  1. 这是复制的某种标准做法吗?
  2. 如何获取Array而不是Object?

2 个答案:

答案 0 :(得分:2)

arguments不是数组,而是数组。要对arguments进行浅层克隆,请使用Array.prototype.slice.call(arguments)。这将创建一个包含所有参数的数组。从那里,要获得深度克隆,请使用angular.copy

var foo = angular.module('foo', []);

foo.controller('bar', function($scope) {
   $scope.trace = function() {
       var clonedArguments = angular.copy(arguments);
       console.log(clonedArguments);
       var clonedArgs = angular.copy(Array.prototype.slice.call(arguments));
       console.log(clonedArgs);
   };
  $scope.trace(1, 'foo', { bar: 27 })
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="foo" ng-controller="bar"></div>

答案 1 :(得分:0)

编辑:我认为console.dir()可能是您在阅读本文后想要的内容

Print JSON parsed object?