Array.prototype.slice() 是 JavaScript 中实现数组浅拷贝的常用方法,不修改原数组,返回新数组;仅复制第一层值,基本类型独立,引用类型共享内存地址。

Array.prototype.slice() 是 JavaScript 中最常用、最简洁的数组浅拷贝方法之一。它不修改原数组,而是返回一个新数组,包含从开始到结束(不包括结束)的元素。
基本用法:空参数实现完整拷贝
调用 slice() 时不传任何参数,等价于 slice(0),会复制整个数组:
const original = [1, 2, { name: 'Alice' }];const copy = original.slice();
console.log(copy); // [1, 2, { name: 'Alice' }]
console.log(original === copy); // false(不是同一个引用)
console.log(original[2] === copy[2]); // true(对象仍是同一引用 → 浅拷贝)
为什么叫“浅拷贝”?关键细节要清楚
slice 只复制数组第一层的值:
- 对基本类型(number、string、boolean 等),复制的是实际值,互不影响
- 对引用类型(对象、数组、函数等),复制的是内存地址,新旧数组中对应项仍指向同一个对象
所以修改 copy[2].name 会影响 original[2].name,但 copy.push(3) 不会影响 original。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
其他等效写法(原理相同)
以下写法效果和 slice() 完全一致,都是返回新数组:
original.slice(0) // 显式指定起始索引original.slice(0, original.length) // 起始+结束,更明确
[...original] // 展开运算符(ES6+,语义更直观)
Array.from(original) // 同样返回新数组
注意点:slice 对类数组对象也适用
slice 是通用方法,可借用在类数组上(如 arguments、NodeList):
function example() {const args = Array.prototype.slice.call(arguments);
// 或 ES6 写法:const args = [...arguments];
return args;
}
不过现代开发中更推荐用扩展运算符或 Array.from 替代 call(slice) 的老写法。

















