js的浅拷贝与深拷贝

浅拷贝和深拷贝只针对对象和数组这样的数据类型,对于基本的数据类型不存在这些问题

1、浅拷贝

浅拷贝之后的对象或数组与原对象或数组指向内存中的同一个地址,改变其中任何一个,另一个也会相应的被改变

2、深拷贝

深拷贝之后的对象或数组与原对象和数组的内存地址是独立的,改变任何一个,另一个都不会受影响

数组的深拷贝

var a = [1,2,3];
var b = a.concat();//数组拼接
var c = a.slice(0);//截取数组

对象的深拷贝

手动复制,将属性一个个复制到新对象中,或使用Object.assign()该方法只能复制基本数值的属性,若属性为引用类型,则为浅复制,即这两种方法的处理深度只有一层,没有做到真正的深复制

转成JSON再转回来

var obj1 = {a:1,b:{a:11,b:22}};
var obj2 = JSON.parse(JSON.stringify(obj1))

该方法值适用于JSON格式的对象,而function没有办法转成JSON,该方法只适用于单纯的数据对象

jquery的$.extend方法

lodash中的_.cloneDeep

 

posted @ 2018-06-24 21:27  慵懒的小猪  阅读(202)  评论(0编辑  收藏  举报