浅拷贝和深拷贝只针对对象和数组这样的数据类型,对于基本的数据类型不存在这些问题
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