slice返回新数组且原数组不变,splice直接修改原数组;slice截取[start, end)元素,splice可删除、插入或替换元素并返回被删元素。

slice 方法会返回一个新数组,原数组保持不变,这是它和 splice 最关键的区别。
slice 的基本用法
调用 arr.slice(start, end) 时,从索引 start(包含)开始,到索引 end(不包含)结束。若省略 end,则截取到末尾。
- 索引支持负数:-1 表示最后一个元素,-2 表示倒数第二个,以此类推
- 如果 start 大于等于数组长度,返回空数组
[] - 如果 start 或 end 超出范围,会被自动“裁剪”到合法区间(如大于 length 就按 length 处理)
常见截取场景示例
假设 const arr = [10, 20, 30, 40, 50];
-
arr.slice(1, 3)→[20, 30](第 2 到第 4 个元素,不含第 4 个) -
arr.slice(-2)→[40, 50](最后两个) -
arr.slice(2)→[30, 40, 50](从第 3 个开始到结尾) -
arr.slice()→[10, 20, 30, 40, 50](浅拷贝整个数组)
注意浅拷贝特性
slice 返回的是新数组,但只复制第一层引用。如果原数组里有对象或嵌套数组,新数组中的这些元素仍指向同一内存地址。
- 修改新数组的元素(如数字、字符串)不影响原数组
- 但修改新数组中对象的属性(如
newArr[0].name = 'xxx'),原数组对应对象也会变化 - 需要深拷贝时,不能依赖 slice,得用
JSON.parse(JSON.stringify(arr))或结构化克隆等方案
和 splice 的直观对比
想“拿走一段”又不改原数组?选 slice;想“删掉一段”并可能插入新内容?选 splice。
-
arr.slice(1, 3):原数组不变,返回[20, 30] -
arr.splice(1, 2):原数组变成[10, 40, 50],也返回[20, 30]
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











