slice方法返回新数组且不改变原数组,语法为arr.slice(start, end),支持负索引和省略参数,仅浅拷贝,对象引用共享;与splice的核心区别在于后者会修改原数组。

slice 方法会返回一个新数组,原数组完全不受影响——这是它和 splice 最关键的区别。
基本用法:指定起止索引
语法是 arr.slice(start, end),其中:
-
start 是开始位置(包含),从 0 开始计数;可为负数,表示从末尾倒数(
-1是最后一个元素) - end 是结束位置(不包含),省略时默认截取到末尾
- 如果
start >= end或任一参数超出范围,返回空数组[]
例如:const arr = [10, 20, 30, 40, 50];<br>const sub = arr.slice(1, 4); // [20, 30, 40]<br>console.log(arr); // [10, 20, 30, 40, 50](没变)
常用技巧:灵活处理边界
利用负索引和省略参数,能快速实现常见需求:
-
arr.slice(-2)→ 取最后两个元素 -
arr.slice(2)→ 从第 3 个元素开始取到结尾 -
arr.slice()→ 不传参数,等效于浅拷贝整个数组 -
arr.slice(0, -1)→ 排除最后一个元素
注意点:只做浅拷贝
slice 创建的是新数组,但内部的**对象或数组引用不会被深拷贝**:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 对数组中的原始值(数字、字符串)修改,不影响原数组
- 对数组中的对象修改其属性,原数组中对应对象也会变化
例如:const arr = [1, {name: 'Alice'}];<br>const copy = arr.slice();<br>copy[0] = 99; // 原数组 arr[0] 还是 1<br>copy[1].name = 'Bob'; // arr[1].name 也变成 'Bob'
和 splice 的核心区别
别把 slice 和 splice 搞混:
-
slice():只读操作,不改原数组,返回子数组 -
splice():会修改原数组(删除/插入元素),返回被删除的元素
需要“复制一部分”时,认准 slice;需要“删掉一部分”时,才用 splice。

















