javascript中展开运算符(...)实现数组浅拷贝,仅复制第一层元素引用,嵌套对象仍共享内存;如const copy=[...original],修改copy基本类型不影响original,但修改嵌套对象会影响original。

JavaScript 中用展开运算符(...)实现数组的浅拷贝,本质是将原数组的每个元素依次取出,放入一个新数组中。它只复制第一层引用,对嵌套对象或数组不递归处理。
基本写法:直接展开到新数组
这是最常用、最简洁的方式:
const original = [1, 2, 3]; const copy = [...original];
此时 copy 是一个新数组,修改它不会影响 original(对基本类型元素而言)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
注意浅拷贝的限制:嵌套对象仍共享引用
如果数组里包含对象或子数组,展开后内部的引用并未被复制:
const original = [1, { name: 'Alice' }];
const copy = [...original];
copy[1].name = 'Bob';
console.log(original[1].name); // 'Bob' —— 原数组也被改了
这是因为 { name: 'Alice' } 是一个对象引用,展开只是把该引用复制了一份,两个数组指向同一个对象。
配合其他方法可应对常见需求
- 想深拷贝简单结构?可用
JSON.parse(JSON.stringify(arr))(仅限纯数据,不含函数、undefined、Date 等) - 需要真正深拷贝且兼容复杂类型?推荐使用
structuredClone()(现代浏览器支持) - 只想拷贝并添加/过滤元素?展开运算符很适合组合操作:
[...original, 4]或[...original.filter(x => x > 1)]
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










