扩展运算符...和map,filter等方法返回的数组是深拷贝么

扩展运算符...和map,filter等方法返回的数组是深拷贝么?

我们先对扩展运算符做一个测试

const a = [1,[2,3],{c:4}]
const b = [...a]

a[1][1] = 13
a[0] =12
console.log(b[0])   // 1
console.log(b[1][1])   // 13

a[2].c = 14
console.log(b[2].c)  // 14

由上面的测试可以看出,扩展运算符只是部分深拷贝,只是对第一层进行了深拷贝,其他都是浅拷贝

我们再对map和filter进行测试

const a = [1,[2,3],{c:4}]
const b = a.map(item=>item)
const c = a.filter(item=>item)

a[1][1] = 13
a[0] =12

console.log(b[0])   // 1
console.log(b[1][1])   // 13
console.log(b[0])   // 1
console.log(b[1][1])   // 13

a[2].c = 14
console.log(b[2].c)  // 14
console.log(b[2].c)  // 14

有上面的测试可见,map和filter返回的数组也是部分深拷贝,只对第一层进行了深拷贝

我们也可以这样理解,他们都是把第一层的元素挨个取出来然后赋值给了一个新的数组

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。