主要在于复制出来的新对象和原来的对象是否会互相影响,改一个另一个也会变
浅拷贝:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅拷贝出来的对象也会相应的改变(新旧对象共享内存,修改一个,另一个也会受到影响)
深拷贝:在内存开辟一块新的地址(堆内存中)用于存放复制的对象
浅拷贝例子:
一瓶饮料,开始插入了一根吸管,然后浅拷贝一下,又插入了一根吸管,所以当一根吸管喝饮料时另一根吸管也会受到到影响
深拷贝例子:
一瓶饮料一根吸管,深拷贝一下,就是重新开一瓶饮料(重新开辟一块地址)用于存放所复制对象
不管两根吸管怎么使用,对彼此都没有影响
浅拷贝:
当改变obj1的属性值是 obj会因为obj1的改变而改变
var obj = {name:"jiyifei",age:18}
var obj1=obj
console.log(obj1); //name:'jiyifei',age:18
obj1.age=22
console.log(obj) //name:'jiyifei',age:22
console.log(obj1);//name:'jiyifei',age22
Object.assign()也是浅拷贝的操作
var obj = {name:"jiyifei",age:18}
var obj1=Object.assign(obj)
obj1.age=22
console.log(obj) //age:22
console.log(obj1);//age:22
深拷贝的例子
通过JSON对象实现深拷贝
JSON.stringify:将js的值(对象或者数组)转为JSON字符串
JSON.parse:用来解析JSON字符串,将字符串转化为Object类型
var obj = {name:'张三',age:18}
var obj1 = JSON.parse(JSON.stringify(obj))
obj1.age=22
console.log(obj); //age:18
console.log(obj1);//age:22
使用扩展运算符进行深拷贝
var obj = {name:'张三',age:18}
var obj1 = {...obj,age:20}
console.log(obj); //age:18
console.log(obj1);//age:20