js对象的浅拷贝与深拷贝

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只能拷贝一层

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值