扩展运算符...和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返回的数组也是部分深拷贝,只对第一层进行了深拷贝
我们也可以这样理解,他们都是把第一层的元素挨个取出来然后赋值给了一个新的数组