深拷贝的方法

深拷贝:重新开辟一片空间用来存储新对象,与源对象不共用一块内存空间

      var oldObj = {
            name: '张三',
            age: 21,
            gender: '男',
            hobby: ['篮球', '小说', '游戏', '摄影', '旅游', {
                dream: ['书店', '书', '情', '钱']
            }]
        };

1、递归深拷贝对象

 function deepCopy(newObj, oldObj) {
            for (var k in oldObj) {
                // k 属性名/键名
                // oldObj[k] 属性值/键值
                // 先获取属性值
                var value = oldObj[k];
                if (value instanceof Array) {
                    newObj[k] = [];
                    deepCopy(newObj[k], value)
                } else if (value instanceof Object) {
                    newObj[k] = {};
                    deepCopy(newObj[k], value);
                } else {
                    newObj[k] = value;
                }
            }
            return newObj;
        };
        deepCopy(newObj, oldObj);
        oldObj.name = '春儿';
        console.log(oldObj);
        console.log(newObj);

2、JSON.parse(JSON.stringify(oldObj));

        JSON.stringify()将对象转换为json字符串格式

         JSON.parse()将字符串转换为json对象格式

 var newObj = JSON.parse(JSON.stringify(oldObj));
        oldObj.name = '春儿';
        console.log(oldObj);
        console.log(newObj);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值