js 深拷贝浅拷贝

如何插入一段漂亮的代码片

去如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。.我们怎么去实现深拷贝呢,这里可以递归递归去复制所有层级属性。 代码片:.

这么我们封装一个深拷贝的函数(PS:只是一个基本实现的展示,并非最佳实践)
function deepClone (obj) {
        // 判断需要拷贝的是什么类型÷
        var objClone = Array.isArray(obj) ? [] : {};
        for(key in obj){
          if(obj.hasOwnProperty(key)){
            //判断ojb子元素是否为对象,如果是,递归复制
             if(obj[key] && typeof obj[key] === "object"){
            	 //以下两种方法均可,callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。
             	   objClone[key] = arguments.callee(obj[key]);
                 //objClone[key] = deepClone(obj[key]);
             }else{
                 //如果不是,简单复制
                 objClone[key] = obj[key];
             }
          }
        }
        return objClone;
      }
      let a={
        name:'ykl',
        age:19,
        play:{
          doing:666666
        }
      },
      b=deepClone(a);
      a.play.six='nv';
      a.play.doing = 99999;
      console.log(a);
      console.log(b);

可以看到:
在这里插入图片描述

本文转载于《【JS】深拷贝与浅拷贝的区别,实现深拷贝的几种方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值