【问题标题】:Setting one object equal to another object with the assignment operator in Javascript在 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中完成?显然,我不想在每次需要复制此对象时单独设置每个属性。

【问题讨论】:

    标签: javascript object variable-assignment


    【解决方案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

          【讨论】:

          猜你喜欢
          • 2015-10-28
          • 1970-01-01
          • 1970-01-01
          • 2022-12-10
          • 1970-01-01
          • 2021-10-27
          • 1970-01-01
          • 2020-12-07
          相关资源
          最近更新 更多