13

我从 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;

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

是的,我意识到我可以自己测试这个,我会在等待社区提出答案的同时这样做。但是,我希望我的问题的答案将比回答这个示例更进一步,并且可能会对 javascript 对象的工作原理和一些最佳实践有所启发。

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

4

4 回答 4

17

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

var newObject = JSON.stringify(oldObject);

然后当我需要使用它时:

var evenNewerObj = JSON.parse(newObject);

希望这可以帮助某人。

于 2013-04-25T17:50:04.940 回答
15

在 JavaScript 中,原始类型按值复制,引用类型按引用复制。更多信息在这里:http ://docstore.mik.ua/orelly/web/jscript/ch09_03.html

于 2009-12-22T20:12:46.980 回答
2

它等于 8。

pnt2 = pnt1

该语句将 pnt2 对象指向 pnt1 对象,因此您对 pnt1 所做的任何修改都将显示在 pnt2 中。

于 2009-12-22T20:14:44.823 回答
1

鉴于您在示例中显示的对象,它正在设置对该对象的引用。如果它是原始类型(数字、日期),那么它将复制对象。

于 2009-12-22T20:16:25.533 回答