You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中Array.slice(0)返回的拷贝是否为浅拷贝?

是的,Array.slice(0) 返回的是数组的浅拷贝

你理解的完全正确!Array.slice(0) 确实会返回原数组的一个浅拷贝,具体来说就是:

  • 新数组会拥有独立的内存地址:它是一个全新的数组容器,和原数组不是同一个对象;
  • 数组元素仍指向原内存地址:如果数组里存的是引用类型(比如对象、数组),新数组里的元素和原数组的对应元素其实是同一个引用;如果是原始值(比如字符串、数字),则是值的复制(但原始值本身不可变,所以表现上和引用类似)。

咱们来看你给出的示例代码:

let oldArray = ['old', 'array']; 
let newArray = oldArray.slice(0); 
let sameElement = oldArray[0] === newArray[0]; // true
let sameArray = oldArray === newArray; // false

这个结果完美验证了浅拷贝的特性:

  • oldArray === newArray 返回false,说明两个数组是不同的对象,新数组有自己的内存空间;
  • oldArray[0] === newArray[0] 返回true,对于字符串这种原始值来说,是值完全相等;如果换成引用类型,这个特性会更明显:
let oldArray = [{name: 'Alice'}, 'test'];
let newArray = oldArray.slice(0);
// 修改新数组里的对象属性
newArray[0].name = 'Bob';
// 原数组的对象也会跟着变化
console.log(oldArray[0].name); // 输出 'Bob'

这就是因为浅拷贝只复制了数组容器,而没有递归复制里面的引用类型元素,所以它们依然共享同一个内存地址。

内容的提问来源于stack exchange,提问作者Ole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:29:30