我有一个带有数组的复杂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]
我的实际目标要复杂得多,但这是发生事情的基本思路......
有什么想法吗?
答案 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