我有一个关于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
应该只是黄色引用蓝色而不反之,变量蓝色如何受黄色影响?
答案 0 :(得分:2)
在JS中,所有作业都是按值完成的。
但是,对于对象,该值是引用。
也就是说,如果您使用yellow = blue
,则yellow
和blue
都将在内存中包含相同的对象。所以你不能改变另一个而不改变另一个。
答案 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
& blue
指向同一个对象,因此通过yellow
进行修改与通过s = "<select>"
进行修改相同,并且在两种情况下,效果&#34;都适用于&#34;两个变量(它总是相同的对象)