一、简单理解
拷贝,就是赋值。把一个变量赋给另外一个变量,就是把变量的内容进行拷贝。把一个对象的值赋给另外一个对象,就是把一个对象拷贝一份。
- 深拷贝:被拷贝对象和拷贝对象拥有不同的资源,但资源的内容是相同的
- 打个比方:我办了一张和我原来手机卡一样的手机卡,这两张卡的套餐是一样的,但是这两张卡的流量是分开的
- 浅拷贝:被拷贝对象和拷贝对象使用的是同一个资源,资源的内容也是相同的
- 打个比方:我用我的手机号办了一张副卡,主卡和副卡的流量是一起的
二、基本类型和引用数据类型
- 基本数据类型:就是值类型,即在变量所对应的内存区域存储的是值。
- 名和值都在栈内存中
- 引用数据类型:就是地址类型。
- 名存在栈内存中,值存在堆内存中,栈内存会提供一个引用地址指向堆内存中的值
三、具体理解
- 深拷贝:拷贝了一个变量,对变量值进行修改,不会影响被拷贝变量的值
let x = 100;
let xCopy = x; // 此时x和xCopy还是共用同一资源
xCopy = 10000; // xCopy创建独立的资源
console.log(x); // 100
console.log(xCopy); // 10000
- 浅拷贝:拷贝一个对象,对对象属性的值进行修改,会影响被拷贝对象属性的值
const x = { val:100 };
const xCopy = x;
xCopy.val = 10000;
console.log(x.val); // 10000
console.log(xCopy.val); // 10000