1.深拷贝和浅拷贝的区别?
Js有两种数据类型 基本数据类型和引用数据类型 基本数据类型都是按值访问的,我们可以直接操作保存在变量中的实际的值。而引用类型如Array,我们不能直接操作
对象的堆内存空间。引入类型的值都是按引用访问的,即保存在变量对象中的一个地址,该地址与堆内存的实际值相关联。
浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;
深拷贝:复制并创建一个一模一样的对象,不共享内存,修改新对象,旧对象保持不变。
Object.assign()
Object.assign()是一种可以对非嵌套对象进行深拷贝的方法,如果对象中农出现嵌套情况,那么其对被嵌套对象的行为就成立普通的浅拷贝。
let foo = {
a : 1,
b : 2,
c : {
d : 1,
}
}
let bar = {};
Object.assign(bar,foo);
foo.a++;
foo.a === 2 //true
bar.a === 1 //true
foo.c.d++;
foo.c.d === 2 //true
bar.c.d === 2 //true
3.转成JSON
用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象。
var obj1 = { body: { a : 10} };
var obj2 = JSON.parse(JSON.stringify(obj1));
obj2.body.a = 20;
console.log(obj1); //
4.采用递归的方法