javaScript之深拷贝与浅拷贝

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript之深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。

 js中有两种数据类型:

     1.  基本类型  :  Number、String、Boolean、Null、Undefined 

     2.  复杂类型  :  Object 、Array

  深拷贝和浅拷贝只针对复杂类型的数据,因为基本类型数据的定义都会重新开辟新的内存。

  浅拷贝拷贝的是内存地址,只是增加一个指针指向已有的内存,这时多个数据共用一个内存空间;深拷贝是新增了指针并且新开辟了内存空间,新指针指向新的内存。

浅拷贝:

var a={
name:‘WangJing‘,
sex:‘女‘,
age:‘25‘
};
var b = a ;
b.name = ‘白子画‘;
console.log(a.name); //白子画--------------浅拷贝:拷贝的是内存地址,指针指向同一个内存空间,修改其中一个其他也会改变

修改对象b的属性值,对象a的属性值也会改变,这就是浅拷贝 (数组也是一样)

 

深拷贝:

var c = {}; //不要写 var c; 会报错
function extend(a,b){
   for(var prop in a){
       b[prop]=a[prop];
   }
}
extend(a,c);
c.name = "胡歌";
console.log(a.name); //白子画 --------------深拷贝:新建内存,新指针指向新的内存空间    修改其中一个不会影响另外的数据

 

 

以下代码可以解决深拷贝

function extend(a, b) {
				for(var prop in a) {
					//判断是否是基本数据类型
					if(typeof a[prop] === "object") {
						b[prop] = (a[prop].constructor === Array) ? [] : {};//对象和数组区别处理
						extend(a[prop], b[prop]);
					} else {
						b[prop] = a[prop];
					}

				}

			}

 
















以上是关于javaScript之深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript深拷贝与浅拷贝

零基础快速掌握JavaScript数组深拷贝与浅拷贝

ES6深拷贝与浅拷贝

JavaScript深拷贝与浅拷贝

深拷贝与浅拷贝

深拷贝与浅拷贝js,方法