通过索引设置数组对象的值设置所有数组项

时间:2012-04-12 22:18:17

标签: javascript arrays object

我有一个带有数组的复杂javascript对象。当我尝试设置索引的一个属性的值时,它将应用于数组的所有项目。

这是一个基本的例子:

var obj = new Object();    
obj.arr = [];
obj.arr[0] = {pos:[0,0]};
obj.arr[1] = {pos:[0,0]};

现在,如果我通过特定索引为对象的属性设置值

obj.arr[0].pos = [10,10];
obj.arr[1].pos = [5,5];

这里似乎是为数组的两个项设置值[5,5]。结果值为:

console.log(obj.arr[0].pos)返回[5,5]

console.log(obj.arr[1].pos)也会返回[5,5]

我的实际目标要复杂得多,但这是发生事情的基本思路......

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

它们共享相同的链接,即对象的几个变量/属性指的是相同的值。

确切答案(错误的位置)取决于对象的组成方式。

var nested = {a:1};
var obj = {arr:[]};
obj.arr[0] = {pos:0, n:nested};
obj.arr[1] = {pos:0, n:nested};

obj.arr[0].pos = 1;
obj.arr[1].pos == 1; // false
obj.arr[0].nested.a = 2;
obj.arr[1].nested.a == 2; // true

分配相同的数组/对象文字是不一样的。

var a = [0];
var b = [0];
b[0] = 1;
a[0] == 1; // false
b = a;
a[0] = 2;
b[0] == 2; // true

a = b = [0];
a[0] = 1;
b[0] == 1; // true