-
理解浅拷贝和深拷贝
js中的数据可以大致分为两种类型:基本数据类型和引用数据类型。
基本数据类型:基本数据类型的变量的赋值,可理解为深拷贝,修改其中一个数据,另一个数据不会随之变化
引用数据类型:引用数据类型分为key和value,它们两个分开存储,数据的值value在内存中,而指针key指向内存中的value值;引用数据类型的数据进行赋值,其实只是拷贝了数据的指针key,两个key指向的是同一个内存中的同一个值,修改其中一个指针对值的修改,另一个数据的值也会随着更改。
-
如何简单进行深拷贝
-
数组的深拷贝
var a1 = [1,2,3]; var a2 = a1.concat(); a1[0] = 2; console.log(a1);// [2,2,3] console.log(a2);//[1,2,3] //================================= //我们也可以使用ES6的写法 var a1 = [2,2,2]; var a2 = [...a1]; a1[0] = 1; console.log(a1);// [1,2,2] console.log(a2);//[2,2,2]
个人觉得ES6这种方式进行简单的数组的深拷贝,再好不过啦。
注意:但是如果数组的item是对象,这种方法复制的数组就是浅拷贝的哦 -
对象的深拷贝
- 借助我们的JQuery库中的extend方法:$.extend( [deep ], target, object1 [, objectN ] )
- deep:表示是否进行深拷贝
- target: 合并后到该对象上
- object1: 需要被合并的对象
-
var o1 = {a: 1, b: 2, c: 3}; var o2 = $.extend(true,{},o1); o1.a = 2; console.log(o1); //{2,2,3} console.log(o2); //{1,2,3}
- JSON.stringify():对简单的对象深拷贝,不能拷贝具有方法,子级的对象
-
var o1 = {a: 1, b: 2, c: 3}; var o2 = JSON.parse(JSON.stringify(o1)); o1.a = 2; console.log(o1); //{2,2,3} console.log(o2);//{1,2,3}
-
- 简单介绍到这里,哈哈哈,这些真的是简单好用的方法,适合日常使用,关于多级对象和方法的拷贝,以后再整理
- 借助我们的JQuery库中的extend方法:$.extend( [deep ], target, object1 [, objectN ] )
-