首页 > 编程语言 > 详细

对象、数组的深拷贝和浅拷贝

时间:2020-09-22 22:44:35      阅读:55      评论:0      收藏:0      [点我收藏+]

JavaScript的数据类型分为基本数据类型和引用类型。二者在内存中存放的方式不同,导致了其赋值时差异。

基本类型值
  基本类型值指的是存储在栈中的一些简单的数据段,在JavaScript中基本数据类型有String,Number,Undefined,Null,Boolean。

  基本类型是按值访问的,从一个变量复制基本类型的值到另一个变量后这两个完全独立的,即使一个变量改变了也不会影响到第二个变量。

引用类型值
  引用类型值是引用类型的实例,它是保存在堆内存中的一个对象,引用类型是一种数据结构,最常用的是Object,Array,Function类型。

浅拷贝:

  基本数据类型赋值时,给的是实实在在的数据值 ,赋值后二者只是值一样而已,不会相互影响; 而引用类型,给的是原数据的引用地址,所以新旧数据会互相影响,因为本质上还是同一个数据对象,浅拷贝就是基于表面的拷贝方式;当属性值为对象类型时,只拷贝了对象数据的引用地址,导致新旧数据没有完全分离,还会互相影响。

深拷贝:

  深拷贝就是 ‘完全’拷贝,也就是两个不一样的引用地址,拷贝之后新旧数据完全分离,不再共用对象类型的属性值,不会互相影响。

实现方式:

  JSON.parse(JSON.stringify(Obj))    不能深拷贝属性值是函数的对象。

  Object.assign({},obj1,obj2...)    注意前边是一个空对象。

总结

  要理解造成浅拷贝的原因:对象类型数据复制时,复制了引用地址,用的还是同一个数据对象;所以实现深拷贝的方式就是要对 对象类型属性值递归进行深拷贝,避免直接赋值。

对象、数组的深拷贝和浅拷贝

原文:https://www.cnblogs.com/hqkbk/p/13714903.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!