-5

Javascript 引用对对象的行为不同。请在下面的代码中解释这一点。

在 javascript 变量中假设 x 和 y,其中 x=5。我将 x 分配给 y 并更改 y=6 的值。x 仍然没有改变 x=5。但是在 javascript 对象中假设 x 和 y 其中 xa=5 如果我将 x 分配给 y 并将 y 更改为 ya=6,现在 x 也更改为 xa=6

考虑变量

var x,y;
x=5;
console.log(x);//x is 5
y=x;
y=6;
console.log(x);//x is still 5
console.log(y);//y is 6

输出

x:5
x:5
y:6

但在对象

var x={},y={};
x.a=5;
console.log(x);// x is {a:5}
x=y;
y.a=6;
console.log(x);// x is {a:6} changing y, x is also changed
console.log(y);// y is {y:6}

输出

x:{a:5}
x:{a:6}
y:{a:6}
4

1 回答 1

2
y = x;
y = 6;

在这里,您分配 to 的值,x 然后 y更改y. 这不会改变x,因为x从未分配过新值。

var x = {}, y = {};

在这里,您创建了两个新对象并将它们的地址分配给xy。这两个变量现在的行为就像指针一样,它们本身不保存对象的值,而只是保存它的地址。因此,x.a = 5您没有将 5 分配给x添加a到仅由x.

x = y;
y.a = 6;

而且,在这里您实际上覆盖了先前对象的引用并x指向y现在引用的对象。因为x现在y指向同一个对象,所以通过y反射完成的更改x也是如此。

于 2013-08-18T02:03:41.867 回答