扩展运算符(...)拷贝数组本质是创建浅层副本的新数组,语法为const newarr = [...oldarr];适用于一维原始类型,但对嵌套对象仍共享引用,深拷贝需配合json.parse(json.stringify())或structuredclone()。
使用扩展运算符(...)拷贝数组,本质是创建一个新数组,包含原数组所有元素的浅层副本。
基本语法:直接展开数组
最常用方式是将原数组用扩展运算符展开,放入新数组字面量中:
const newArr = [...oldArr];- 这会生成一个长度、元素值都相同但内存地址不同的新数组
- 适用于一维数组,对数字、字符串等原始类型完全安全
注意:仅实现浅拷贝
扩展运算符不会递归复制嵌套对象或数组:
- 若
oldArr中包含对象(如[1, {name: 'Alice'}]),新数组中的对象仍指向同一引用 - 修改
newArr[1].name会影响oldArr[1].name - 需要深拷贝时,需配合
JSON.parse(JSON.stringify())或结构化克隆(structuredClone())等方案
与其他拷贝方式对比
扩展运算符在可读性和简洁性上优于传统方法:
-
Array.from(oldArr)和oldArr.slice()效果等价,但扩展运算符更直观 - 比
for循环或map()更简短,且天然支持解构与合并场景 - 可与其他数组或值组合:
[...oldArr, 'newItem', ...anotherArr]
常见误用提醒
扩展运算符只作用于可迭代对象:
- 不能直接用于普通对象(除非配合
Object.values()或Object.entries()) - 对
null或undefined展开会报错,使用前建议校验 - 大数组(百万级元素)可能触发栈溢出或性能问题,此时应考虑
Array.from()或循环
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











