array.from()是浅拷贝还是深拷贝

浅拷贝:只复制指向引用类型的指针,而不复制引用类型本身,新旧引用类型还是共享同一块内存。浅拷贝的引用类型若包含子引用类型,当新的引用类型对子引用类型发生改变时则会使原引用类型子引用类型一同改变,若新的引用类型只改变第一层的数据,则原引用类型不会改变。

深拷贝:会另外创造一个一模一样的引用类型,新引用类型跟原引用类型不共享内存,修改新引用类型不会改到原引用类型。

如上,网上查到的浅拷贝和深拷贝的定义。
正常的数组的浅拷贝应该是下面这样的。

img

array.from()是这样的

img

这个现象来说应该是深拷贝。

但我发现好多文章写的都是浅拷贝。

我该信谁的?

重组数组了 就不涉及到深浅问题了 你就记着他不会有浅拷贝那么多的麻烦事情了,你要说他是深拷贝 他确实没有去顾及数组中的指向问题,你要说是浅拷贝他不会去影响以前的数据,所以你只需要记住他不会有浅拷贝那么多的麻烦事就行了

这种效果就是深拷贝。各自修改不影响对方。浅拷贝一定是会影响的

https://blog.csdn.net/weixin_47074432/article/details/112919142

是浅拷贝,浅拷贝是引用类型内的基本类型不会被影响,但是引用类型内的引用类型会被影响

img

<script>
    var a = [[0, 1], 2, 3, 4]
    var b = Array.from(a)
    var c = JSON.parse(JSON.stringify(a))
    a[0][0] = 5
    console.log(b, c)
</script>

你可以看下这个例子,总的来说 只是拷贝了一层 并不是把当前数组所有的内部数据全部做拷贝
全部做不管多深的嵌套关系拷贝不相等才叫深拷贝; 这种只拷贝一层 或者 直等赋值方式 都可以叫做是浅拷贝

img