首页/ 文章/前端/正文

一般而言,我们对于拷贝的理解就是拷贝之后会获得两个初始内容完全一样的个体。这两个个体是完全独立的。

为什么会存在深浅拷贝的差别?


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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


打赏

好文章,更需要你的鼓励

免责声明:本文转载至互联网,不代表本站的观点和立场。

浏览次数:117 次浏览

发布时间:2020-12-25 12:19:16

相关标签: js深拷贝lodash

本文链接:http://v3.pro.demo.hisiphp.com/show-74.html