浅析深浅拷贝

       我们在对对象进行复制时就用到深浅拷贝。

一、普通复制

控制台打印结果: 

     浅析深浅拷贝_第1张图片

       之所以我们要用到拷贝,是因为直接赋值的复制可能不能满足我们的需求。向上面代码所展示的,我们复制代码时,复制到的是地址,所以对复制体修改实际修改的是原对象的值,这个时候我们再对对象进行复制的意义就不大了。

二、浅拷贝

        浅拷贝是创建一个新的对象,但只复制原对象的第一层属性,如果原对象的属性是基本类型,那么复制的是值,在对复制体进行更改不会改变原对象的值;如果原对象的属性是引用类型,那么复制的是地址,复制的对象改变改变的就是地址里的内容,原对象内容也会改变。

浅拷贝方法:

  • 方法1:Object.assign(目标文件,原文件)
  • 方法2:const 目标文件={...原文件}

    拷贝数组:

           方法1:Array.prototype.concat()

          方式2:[...arr]

代码演示:

控制台打印结果:  

浅析深浅拷贝_第2张图片

三、深拷贝

       深拷贝是创建一个新的对象,并递归地复制原对象的所有层级的属性,无论原对象的属性是基本类型还是引用类型,都会复制其实际的值,深拷贝后两个对象完全独立,互不影响。

深拷贝的方法:

1、递归实现

2、使用js库lodash里面cloneDeep内部实现


3、利用JOSN字符串转换

 控制台打印结果: 

浅析深浅拷贝_第3张图片

你可能感兴趣的:(前端,javascript)