You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何实现对象赋值不共享内存指针

JS对象拷贝的最优实现方案

你遇到的是JS引用类型赋值共享内存地址的问题,需要对原对象做拷贝来实现两个对象独立修改,根据你的对象结构可以选择不同的方案:

单层无嵌套对象(浅拷贝即可)

  • 扩展运算符写法(ES6+支持,最简洁)
var a = {"color":"blue"};
var b = {...a};
a.color = "orange";
console.log(b.color); // 输出 blue
  • Object.assign 写法(兼容性略优于扩展运算符)
var a = {"color":"blue"};
var b = Object.assign({}, a);
a.color = "orange";
console.log(b.color); // 输出 blue

含嵌套的复杂对象(需要深拷贝)

  • JSON序列化反序列化组合(仅适用无特殊类型的普通对象)
var a = {"color":"blue", "info": {"size": 10}};
var b = JSON.parse(JSON.stringify(a));
a.info.size = 20;
console.log(b.info.size); // 输出 10

注意:该方案会丢失函数、Symbol、undefined类型的值,Date会被转为字符串,RegExp会被转为空对象,无法处理循环引用的对象

  • structuredClone 原生API(现代浏览器/Node.js 17+支持,最优原生深拷贝方案)
var a = {"color":"blue", "info": {"size": 10}, createTime: new Date()};
var b = structuredClone(a);
a.info.size = 20;
console.log(b.info.size); // 输出 10
console.log(b.createTime instanceof Date); // 输出 true

该方案支持循环引用,能正确处理Date、RegExp、Map、Set等绝大多数内置类型,仅不支持函数、Symbol等极少数特殊类型。

如果你的场景需要兼容老旧环境,或是需要拷贝包含函数的特殊对象,可以自己实现递归遍历的深拷贝逻辑即可。

内容的提问来源于stack exchange,提问作者n w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 07:24:03