slice()可实现数组浅拷贝,不传参时复制整个数组;基本类型独立修改,引用类型共享内存,修改会影响原数组。

在 JavaScript 中,slice() 方法常被用来实现数组的浅拷贝。它原本用于提取数组的一部分,但当不传参数或传入 0 作为起始索引时,可以快速创建一个原数组的副本。
slice() 基本语法
array.slice(start, end) 方法返回从 start 到 end(不包含)之间元素的新数组,不会修改原数组。两个参数都是可选的:
- start:开始位置的索引,默认为 0
- end:结束位置的索引(不包含),默认为数组长度
因此,调用 array.slice() 或 array.slice(0) 会复制整个数组。
使用 slice() 实现浅拷贝
浅拷贝意味着新数组中的元素是原数组元素的引用。对于基本类型(如数字、字符串),修改副本不会影响原数组;但对于对象或嵌套数组,它们共享引用。
立即学习“Java免费学习笔记(深入)”;
示例:
const copy = original.slice();
copy[0] = 999; // 不会影响 original
copy[2].name = 'Bob'; // 会影响 original,因为对象是引用
console.log(original); // [1, 2, { name: 'Bob' }]
与其他拷贝方式对比
-
扩展运算符(...):
[...array]效果与slice()相同,更现代简洁 -
concat():
array.concat()也能实现浅拷贝,但语义不如 slice 清晰 -
Array.from():
Array.from(array)同样可用于浅拷贝
这些方法在功能上等价,选择取决于代码风格和可读性需求。
适用场景与注意事项
slice() 实现浅拷贝适合以下情况:
- 需要避免修改原数组的纯函数操作
- 临时处理数组数据,比如排序、过滤前保留原始结构
- 数据结构只包含基本类型值
注意:如果数组包含深层嵌套对象并需要独立副本,应使用深拷贝方法,例如 JSON.parse(JSON.stringify(array)) 或借助 Lodash 的 cloneDeep。
基本上就这些。slice() 是一种简单可靠的浅拷贝手段,理解其行为有助于写出更安全的数组操作代码。










