一般而言,我们对于拷贝
的理解就是拷贝之后会获得两个初始内容完全一样的个体。这两个个体是完全独立的。
为什么会存在深浅拷贝的差别?
JS当中数据类型分为
基本类型(undefined、null、string、number、boolean、symbol(ES6))
引用类型(Object、Array、RegExp、Date、Function)
基本类型值指的是那些保存在栈内存中的简单数据段,即这种值是完全保存在内存中的一个位置。包含Number,String,Boolean,Null,Undefined ,Symbol。
基本数据类型是按照数值来引用,且也是按值来比较,所以拷贝一个基本数据类型的话,只需要拷贝它的数值。
var a = 2; var b = a; a = 3; console.log(a,b);//3,2 复制代码
可以看到,基本数据类型通过赋值就可以被拷贝,拷贝之后,a和b就是两个独立的个体,他们的变化不会互相影响。所以对于基本数据类型来说,没有什么深拷贝和浅拷贝的差别。
引用类型值:指的是那些保存在堆内存中的对象,所以引用类型的值保存的是一个指针,这个指针指向存储在堆中的一个对象。引用类型统称为Object类型。细分的话,有:Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型 等。
但是对于引用类型,因为引用类型的具体内容数据是存在在堆当中的,堆中的数据不能直接按照数值引用,对象中实际保存的是引用类型数据的地址信息,而不是它具体的内容和数值。 如果我们只是,简单的拷贝下引用类型,那只是拷贝了它的引用地址,所以会出现这种情况。
作者:anysunflower同学
链接:https://juejin.cn/post/6909762402431172621
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。