slice用于安全截取并返回新数组,不改变原数组;splice用于原地修改,可删除、插入或替换元素,返回被删元素。

slice 用于安全截取(不改变原数组),splice 用于原地修改(可删除、插入、替换)——两者参数相似但行为完全不同,用错容易引发 bug。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
slice:只读截取,返回新数组
语法:arr.slice(start, end)。从 start 索引开始(含),到 end 索引结束(不含)。索引支持负数(从末尾计数)。
- 不传参数 → 复制整个数组
- 只传
start→ 截取从 start 到末尾 -
start ≥ end或越界 → 返回空数组[] - 原数组完全不变
例如:
const arr = [1, 2, 3, 4, 5];
const sub = arr.slice(1, 4); // [2, 3, 4]
console.log(arr); // 仍是 [1, 2, 3, 4, 5]
splice:直接修改原数组,功能更重
语法:arr.splice(start, deleteCount, item1, item2, ...)。
必须指定 start 和 deleteCount,后跟任意个插入项。
-
deleteCount === 0→ 不删,只在start处插入新元素 -
deleteCount > 0→ 删除deleteCount个元素,并插入后续项 - 返回被删除的元素组成的数组(可能为空)
- 原数组长度和内容都会变化
例如:
const arr = [1, 2, 3, 4, 5];
const removed = arr.splice(2, 1, 'a', 'b'); // 删除索引 2 的 3,插入 'a','b'
console.log(arr); // [1, 2, 'a', 'b', 4, 5]
console.log(removed); // [3]
常见误用对比与避坑提示
- 想“复制并删掉前两个”?别用
splice后再赋值,用slice(2)更清晰安全 -
splice(0)清空数组,slice(0)浅拷贝数组——别混淆 - 负数索引在
slice中常用(如slice(-2)取最后两项),但在splice中也有效,但需注意start越界时行为(如splice(10, 1)在长度为 5 的数组中等价于splice(5, 1),即从末尾插入) - 批量插入多个元素时,
splice支持展开运算符:arr.splice(1, 0, ...[7, 8, 9])
一句话总结使用场景
要保留原数组?选 slice。
要删、增、换元素且接受原地改动?选 splice。
不确定该用哪个?先问自己:这步操作之后,原数组还能不能继续用?

















