slice()能实现浅拷贝,因为它返回新数组,基本类型值拷贝、引用类型拷贝地址;修改嵌套对象会影响原数组,深拷贝需用structuredclone等其他方法。

slice() 方法可以实现数组的浅拷贝,因为它不修改原数组,而是返回一个新数组,包含从开始索引到结束索引(不包括结束索引)之间的元素。当不传参时(即 arr.slice()),它会复制整个数组。
为什么 slice() 能实现浅拷贝
slice() 创建的是一个新数组,其元素是原数组中对应位置元素的引用。对于基本类型(如数字、字符串、布尔值),相当于值拷贝;对于对象、数组等引用类型,拷贝的是引用地址——这就是“浅拷贝”的本质。
- 原数组中的基本类型元素在新数组里互不影响
- 原数组中的对象或嵌套数组,在新数组中仍指向同一内存地址,修改其属性会影响原数组
基本用法示例
最常用的方式就是不传参数:
const original = [1, 2, { name: 'Alice' }];const copy = original.slice();
console.log(copy); // [1, 2, { name: 'Alice' }]
console.log(copy === original); // false(不是同一个数组)
注意浅拷贝的限制
对嵌套对象的修改会反映在原数组上:
console.log(original[2].name); // 'Bob'(被改了)
如果需要深拷贝,不能只靠 slice(),得配合 JSON.parse(JSON.stringify())(仅限纯数据)、structuredClone()(现代浏览器)或第三方库如 lodash 的 cloneDeep。
其他等效写法对比
以下方法和 slice() 效果一致,都返回新数组:
-
[...arr](展开运算符) Array.from(arr)-
arr.concat()(空参数时)
它们都是浅拷贝,适用场景和注意事项与 slice() 完全相同。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











