angular.copy 当数组有自定义时 属性

angular.copy when array has custom property

考虑以下示例:

var ar = [4, 2, 3];
ar.$x = 'something';
var br = angular.copy(ar);
console.dir(br);

br 不再有 $x 属性,因为在复制数组时,angular 迭代 for (;;;) 看不到自定义属性(如果它用 for in 迭代,那么它会起作用。

我应该做什么?

  1. 像class一样创建数组然后赋值属性;
  2. 如果是错误,请报告给 angular;
  3. 更改我的代码,因为将 属性 分配给数组不是好的做法;

我认为这不是 Angular 问题。如果调用这样的语句:

ar.$x = 'something';
console.log(Object.prototype.toString.call(ar));

您会看到 [object Array] 将被记录。这就是 Array.isArray() 方法的工作方式,反过来,这就是 angular copy() 方法决定如何遍历作为参数传递的实体的方式。这种检测是至关重要的,因为数组上的 for ... in 循环在其他情况下可能会造成一些混淆。原因如下:Why is using "for...in" with array iteration a bad idea?

对于这种特殊情况,我建议您更改代码。

尝试使用 jQuery:

jQuery.extend([], ar);

var ar = [4, 2, 3];
ar.$x = 'something';
var br = jQuery.extend([], ar);
console.dir(br);

尝试angular.merge() 这是一个包含可枚举属性的深拷贝。

var ar = [4, 2, 3];
ar.$x = 'something';
var br = angular.merge([], ar);
console.dir(br);

输出

Array[3]
  0: 4
  1: 2
  2: 3
  $x: "something"
  length: 3
  __proto__: Array[0]