数据类型
- 基本数据类型
数据直接存储到栈中 - 引用数据类型
数据的引用存放在栈中,真实的数据存放在堆内存中
浅拷贝和深拷贝
浅拷贝和深拷贝是只针对引用数据类型而言的,基本数据类型无所谓浅拷贝和深拷贝
- 浅拷贝
当两个引用数据类型浅拷贝时,拷贝的只是引用,改变其中一个数据的值,另一个也会随之改变。两个数据的变化是联动的。 - 深拷贝
创建另一个一摸一样的对象,新对象和原来的对象不共享内存,两个对象数据的变化不会联动
深拷贝实现
基本思路:
如果是原始数据类型,无需拷贝,直接返回
如果是引用数据类型,创建一个新的对象,遍历需要深拷贝的对象,将该对象的属性进行深拷贝后依次添加到新对象上,返回这个新对象
1 | function deepClone(target) { |
个人觉得对于数组的深拷贝,还可以这样实现:
1 | function deepCloneArray(arr) { |
附上Github上的30-seconds-of-code仓库中深拷贝的实现:
1 | const deepClone = obj => { |