Open chenliqio opened 2 years ago
var a = 1; var b = a; console.log(a); // 1 console.log(b); // 1 var b = 2; console.log(b); //2 console.log(a); //1
可以看出b的改变并没改变a的值,因为它们是相互独立的两个基本变量 2. 以及引用类型的地址拷贝
var c = { name:'karen' } var d = c; console.log(d); // karen d.name = 'bob'; console.log(c); // bob
b和a保存的一样的地址,当b改变属性时,a也改变 ## 二、深拷贝 除了拷贝基本类型的值,还完全复刻了对象类型,一个对象的内存是固定存在的,如果要对其进行深拷贝, 唯一的办法就是创建一个新的对象,里面的值完全复刻原来的对象。
var e ={ name:'karen' } var f ={ name:'karen' } f.name = 'bob' console.log(e); //karen console.log(f); //bob
## 三、实现方法 1. 浅拷贝方法 - newObject = oldObject; - Object.assign(newObject,oldObject) -拓展运算符newObject= [...oldObject] 2. 深拷贝的方法 - JSON:用JSON.stringfy()转为Json字符串,再用JSON.parse()转为对象 - for in和递归:for in 就是把值循环给新的对象,如果对象值里有对象,就用递归,把对象里面的值赋值完之后再遍历赋值。
一、浅拷贝
var c = { name:'karen' } var d = c; console.log(d); // karen d.name = 'bob'; console.log(c); // bob
var e ={ name:'karen' } var f ={ name:'karen' } f.name = 'bob' console.log(e); //karen console.log(f); //bob