OO Javascript副本的对象

时间:2015-07-09 22:53:50

标签: javascript

我有一个关于javascript如何使用以下示例代码复制对象的问题:

var blue = {a:1};
var yellow = blue
yellow = 3;

在这种情况下,蓝色的值不会受到a = 1的对象的影响。但是,这样写的时候:

var blue = {a:1};
blue.b = 2;
var yellow = blue
yellow.c = 3;`

在这种情况下,console.log(蓝色)将显示蓝色,其对象中还有一个额外的{c:3}。当yellow = blue应该只是黄色引用蓝色而不反之,变量蓝色如何受黄色影响?

3 个答案:

答案 0 :(得分:2)

在JS中,所有作业都是按值完成的。

但是,对于对象,该值是引用。

也就是说,如果您使用yellow = blue,则yellowblue都将在内存中包含相同的对象。所以你不能改变另一个而不改变另一个。

答案 1 :(得分:2)

在第一种情况下:

var blue = {a:1};
var yellow = blue;   // yellow references blue...

yellow = 3;          // but not anymore. Now it's just a number.

在第二个:

var blue = {a:1};
blue.b = 2;

var yellow = blue    // yellow references blue
yellow.c = 3;        // and still does, so yellow.c and blue.c are the same`

答案 2 :(得分:2)

当您为变量赋值时,变量之前的任何值都消失了。这就是你的第一个样本中发生的事情。

当您将变量分配给作为对象的值,然后修改该对象(将其属性设置为某个值)时,您仍然具有指向该对象的变量。这就是你的第二个样本中发生的事情。

第二个样本中发生的另一件事是yellow&amp; blue指向同一个对象,因此通过yellow进行修改与通过s = "<select>"进行修改相同,并且在两种情况下,效果&#34;都适用于&#34;两个变量(它总是相同的对象)

相关问题