使用Javascript中的赋值运算符将一个对象设置为等于另一个对象

Cha*_*hon 12 javascript object variable-assignment

我来自C背景的javascript.在javascript中,当我使用赋值运算符将一个对象分配给另一个对象时,它是将值从一个复制到另一个,还是现在它们都指向相同的数据?或者,赋值运算符在这种情况下做了什么?

function point_type()
 {
 this.x = 0;
 this.y = 0;
 }

var pnt1 = new point_type();
var pnt2 = new point_type();

pnt1.x = 4;
pnt1.y = 5;

pnt2 = pnt1;

pnt1.x = 8;
pnt2.y = 9;
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,pnt2.x现在是否等于8,还是等于4,还是等于0?

是的,我意识到我可以自己测试一下,我会在等待社区提出答案时这样做.但是,我希望我的问题的答案只会回过头来回答这个例子,并且可能会对javascript对象的工作方式和一些最佳实践有所启发.

跟进问题:
答案似乎是复制了引用.pnt2和pnt1现在指向相同的数据.是否可以设置我的对象以便复制值?这通常是如何在javascript中完成的?显然,我不希望每次需要复制此对象时单独设置每个属性.

Mat*_*att 15

每当我需要在JS中将一个对象复制到另一个对象时,我只需将其转换为原语:

var newObject = JSON.stringify(oldObject);
Run Code Online (Sandbox Code Playgroud)

然后当我需要使用它时:

var evenNewerObj = JSON.parse(newObject);
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


Ann*_*nie 14

在JavaScript中,基元类型按值复制,引用类型通过引用复制.更多信息:http://docstore.mik.ua/orelly/web/jscript/ch09_03.html