1、浅拷贝
默认是浅拷贝,只是将地址进行了复制(修改obj1,obj2也会改变),示例如下:
//浅拷贝
var obj1={name:"Tom"};
var obj2=obj1;
obj2.name="Tom";
console.log(obj1.name); //Tom
console.log(obj2.name); //Tom
2、深拷贝
深拷贝就是对目标的完全拷贝,不像浅拷贝那样只是复制了一层引用,就连值也都复制了。
深拷贝之后,两个对象不会相互影响。
深拷贝的方法
1.利用 JSON 对象中的 parse 和 stringify;
注:如果对象中含有一个函数时(很常见),就不能用这个方法进行深拷贝
var obj1 = {
name: "Tom",
show:function(){
console.log(this.name);
}
};
var obj2 = JSON.parse(JSON.stringify(obj1));
obj2.name = "Jack";
console.log(obj1.name); //Tom
console.log(obj2.name); //Jack
obj1.show(); //Tom
obj2.show(); //函数被丢失
2:利用递归来实现每一层都重新创建对象并赋值
3: 利用Lodash工具
_.cloneDeep(value)
4: 构造字面量对象时使用展开语法★
var obj1={a:1,b:2}
var obj2={...obj1}
5: Object.assign 方法将多个原对象的属性和方法都合并到了目标对象上面。可以接收多个参数,第一个参数是目标对象,后面的都是源对象
var obj1={a:1,b:2}
var obj2={}
Object.assign(obj2,obj1)
注:assigin只能拷贝一层