深拷贝和浅拷贝
数据类型概述
基本的数据类型
数值(number),字符串(string),布尔值(boolean)
至于undefined和null,一般将它们看成两个特殊值
复杂的数据类型
对象是最复杂的数据类型,又可以分为三个子类型
- 狭义的对象(object)
- 数组(array)
- 函数(function)
基本数据类型的拷贝
基本数据类型的值是存入栈内存中的。值与值之间是相互独立存在的,当我们改变了a的值,对b是没有影响的,所以b输出的还是10
1 | let a = 10; |
复杂的数据类型拷贝(引用数据类型)
引用数据类型的值是存入堆内存中的,变量a存的是一个对象的内存地址(对象的引用),所以只是把a的内存地址赋值给b,如果两个变量保存的是同一个内存地址(对象的引用),每当通过修改任意一个变量修改属性时,另一个也会受到影响
1 | let a = { |
1 | let a = [1,2,3] |
深拷贝
如果是基本的数据类型,那么它们之间的拷贝都是深拷贝。如果是引用数据类型,只要把内部的引用类型数据全部都独立开一块内存空间,让它们之间完全不要有共用,数据完全相互不干扰就是深拷贝
浅拷贝
只要内部的引用类型数据有共用,数据会相互干扰就是浅拷贝