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

Posted

技术标签:

【中文标题】在 Javascript 中使用赋值运算符将一个对象设置为等于另一个对象【英文标题】:Setting one object equal to another object with the assignment operator in Javascript 【发布时间】:2010-12-29 06:15:34 【问题描述】:

我从 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中完成?显然,我不想在每次需要复制此对象时单独设置每个属性。

【问题讨论】:

【参考方案1】:

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

var newObject = JSON.stringify(oldObject);

那么当我需要使用它时:

var evenNewerObj = JSON.parse(newObject);

希望这对某人有所帮助。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

等于 8。

pnt2 = pnt1

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

【讨论】:

【参考方案4】:

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

【讨论】:

深入了解 JavaScript 中的深拷贝、浅拷贝和“克隆”oranlooney.com/functional-javascript

以上是关于在 Javascript 中使用赋值运算符将一个对象设置为等于另一个对象的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 使用=为变量赋值

JS:运算符

JavaScript 运算符

JavaScript测验——使用赋值运算符---第3关

JavaScript测验——使用赋值运算符---第3关

JavaScript 运算符