javascript - 具有对象值的子属性是否通过 JavaScript 中的引用复制?

标签 javascript node.js

考虑以下代码:

 A={
  prop1: 12,
  prop2: {x:12}
 };
 newprop2={k:55,l:3};
 A.prop2=newprop2;
 newprop2 = {m:65, n:25};
 console.log(A);

输出是:

  { prop1: 12, prop2: { k: 55, l: 3 } }

我期望的输出是:

  { prop1: 12, prop2: {m:65, n:25} }

因为对象是通过引用复制的,所以我希望子属性是通过引用复制的,因为我想要指定为值的对象很大并且不想维护多个副本。

最佳答案

是的,对象是通过引用复制的。但在 newprop2 = {m:65, n:25}; 行,您将一个新对象分配给 newprop2。较旧的引用仍分配给 A.prop2,它引用 newprop2 所引用的旧对象。因此 newprop2 现在引用了另一个对象,该对象与之前引用的对象已经没有任何关系。

简而言之,您更改了 newprop2 的引用。如果您将通过 newprop2 访问属性,而不更改引用,您将改变 A.prop2 引用的同一对象。

const A = {
  prop1: 12,
  prop2: { x: 12 }
};

let newprop2 = { k:55, l:3 };
A.prop2 = newprop2;

newprop2.k = 65;
newprop2.l = 25;

console.log(A);

关于javascript - 具有对象值的子属性是否通过 JavaScript 中的引用复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47736606/

相关文章:

javascript - 直接上传到S3

javascript - AngularFire 0.82 - 如何查询非规范化数据?

Node.js - 搜索 "util"模块;识别核心模块

node.js - 客户端建立连接时 Socket.io 服务器没有响应

javascript - 带有 express 的 socket.io 更新 DOM 中的变量

javascript 重复循环有问题

javascript - 在node js中将一个文件导入到另一个文件中

javascript - Node : SyntaxError: Unexpected identifier

javascript - 使用 NodeJS 将数据编码为 JWT token 获取错误 PEM 例程 :PEM_read_bio:no start line

javascript - Webpack postcss-loader 在传递函数时不工作