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
迭代,那么它会起作用。
我应该做什么?
- 像class一样创建数组然后赋值属性;
- 如果是错误,请报告给 angular;
- 更改我的代码,因为将 属性 分配给数组不是好的做法;
我认为这不是 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]
考虑以下示例:
var ar = [4, 2, 3];
ar.$x = 'something';
var br = angular.copy(ar);
console.dir(br);
br
不再有 $x
属性,因为在复制数组时,angular 迭代 for (;;;)
看不到自定义属性(如果它用 for in
迭代,那么它会起作用。
我应该做什么?
- 像class一样创建数组然后赋值属性;
- 如果是错误,请报告给 angular;
- 更改我的代码,因为将 属性 分配给数组不是好的做法;
我认为这不是 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]