ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

js深浅拷贝

2020-07-10 11:07:15  阅读:179  来源: 互联网

标签:console log js 深浅 obj 数组 let 拷贝


写在前面:关于深浅拷贝,首先要理解一点,深浅拷贝都是针对引用数据类型而言的(Array、Object)。

浅拷贝

浅拷贝的意思是只复制对象的引用地址,并未复制真正的值。

  //声明一个对象,一个数组
  let obj = {a:"aa",b:"bb"}
  let array = [1,2]
  //分别定义一个新对象、新数组,将上面定义的对象和数组拷贝给新定义的对象和数组
  let cloneObj = obj;
  let cloneArray = array;

  //给拷贝后的对象增加一个属性c,给拷贝后的数组增加一个元素3
  cloneObj.c = "cc";
  cloneArray.push(3)

  console.log(obj)  //{a:"aa",b:"bb",c:"cc"}
  console.log(cloneObj) //{a:"aa",b:"bb",c:"cc"}
  console.log(array)  //[1,2,3]
  console.log(cloneArray) //[1,2,3]

从上面的代码可以看得出来,修改拷贝后的对象或者数组,会同时改变原数组和原对象的值。

深拷贝

深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,连堆中的地址也是重新拷贝一份,不管修改谁,对另外一个也不会造成影响。

目前用的比较多的方法有两个

1.JSON.parse(JSON.stringify(obj));

 

  //声明一个对象,一个数组
  let obj = {a:"aa",b:"bb"}
  let array = [1,2]
  //分别定义一个新对象、新数组,将上面定义的对象和数组拷贝给新定义的对象和数组
  let cloneObj = JSON.parse(JSON.stringify(obj)) ;
  let cloneArray = JSON.parse(JSON.stringify(array));

  //给拷贝后的对象增加一个属性c,给拷贝后的数组增加一个元素3
  cloneObj.c = "cc";
  cloneArray.push(3)

  console.log(obj)  //{a:"aa",b:"bb"}
  console.log(cloneObj) //{a:"aa",b:"bb",c:"cc"}
  console.log(array)  //[1,2]
  console.log(cloneArray) //[1,2,3]

2.loadash的cloneDeep方法。loadash是一个工具库,感兴趣的同学可以去看一下loadash的Api,这里就不做赘述了。

 

标签:console,log,js,深浅,obj,数组,let,拷贝
来源: https://www.cnblogs.com/returnvalue/p/13278156.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有