解构赋值是深拷贝还是浅拷贝?

如题所述

第1个回答  2022-05-31
深拷贝:修改新变量的值不会影响原有变量的值。默认情况下基本数据类型都是深拷贝。
浅拷贝:修改新变量的值会影响原有的变量的值。默认情况下引用类型都是浅拷贝。

ES6的新特性,按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为 解构 。具体操作本文章不做描述。
那么我们在使用解构赋值的时候,到底是深拷贝还是浅拷贝呢?我们可以通过以下的例子得出结论:

输出

以上例子中,我们从对象a中解构赋值了name、age、marriage、addr四个变量,分别是 string 、 number 、 boolean 、 object 类型。改变这四个变量的值后,再与a原来的值作对比,我们发现a的name,age,marriage属性没有改变,而addr属性发生了改变。由此可以得出结论,解构赋值对object类型只是浅拷贝。
实际上,无论是使用扩展运算符(...)还是解构赋值,对于引用类型都是浅拷贝。所以在使用splice()、concat()、...对数组拷贝时,只有当数组内部属性值不是引用类型是,才能实现深拷贝。
相似回答
大家正在搜