温故知新-JS深拷贝

天马行空、脚踏实地~

最近学到的深拷贝的简单写法:

function deepClone(obj){
    // typeof null的结果是object,所以单独拿出来
    if(obj == null ){  
        console.log('请传入对象类型的数据')
        return;
    };
    //如果不是object类型直接返回
    if( typeof obj !== 'object'){ 
        return obj;
    }
    // 这里要注意一下 ,生成一个空newobj
    let newObj = new obj.constructor();
    for(let key in obj){
        newObj[key] = deepClone(obj[key]);
    }
    return newObj;
}
var a = {name: '张三'};
let c = [1,2,4];
var a1 = deepClone(a);
var c1 = deepClone(c);
console.log('a',a); // {name: '张三'};
console.log('c',c); //[1,2,4] 
console.log('c1',c1);  //[1,2,4] 
a.name= '李四'
c[0] = 0;
console.log('a',a); // {name: '李四'};
console.log('c',c); //[0,2,4]
console.log('c1',c1); // 还应该是[1,2,4]

var d = {name:'张三',detail:{age: 14}}
var d1 = deepClone(d);
console.log('d',d); // {name:'张三',detail:{age: 14}}
console.log('d1',d1);  //{name:'张三',detail:{age: 14}}
d.detail.age = 15
console.log('d',d); // {name:'张三',detail:{age: 15}}
console.log('d1',d1);  //{name:'张三',detail:{age: 14}}

本文分享自微信公众号 - 女程序员的日常(gh_df41d619fb70),作者:凛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • this怎么那么难呢?(接上篇-1)

    2019年12月22日,星期六。距离新年还有9天了,宝宝们可以提前想想2020年的目标了。也可以把目标留言在文章下方,目标说给别人听能起到督促自己的作用,不信你...

    用户3258338
  • 关于重定向的坑

    上一周简直忙到起飞,回想一下,其实也并不是活很多,还是效率不够高啊,嗯哼,需要好好想想怎么提高效率了!

    用户3258338
  • Event Loop(1)

    进程描述了CPU在运行指令及加载和保存上下文所需的时间,放在应用上来说就代表了一个程序。线程是进程中的更小单位,描述了执行一段指令所需的时间。

    用户3258338
  • ES6系列_9之对象

    有时候我们会在后台取出key值,而不是我们前台定义好的,这时候我们可以我们可以把后台定义的key值重新构建返回给后台。

    wfaceboss
  • 一段简单的JavaScript代码,模拟Angular数据绑定信息的解析和替换

    Jerry Wang
  • ES5中的对象冒充继承与原型继承

    越陌度阡
  • python实例化对象的具体方法

    python中同样使用关键字class创建一个类,类名称第一个字母大写,可以带括号也可以不带括号;python中实例化类不需要使用关键字new(也没有这个关键字...

    砸漏
  • 从模块外部访问内部成员

    Dream城堡
  • JS-面向对象

    xing.org1^
  • 评价生成器

    很多老师写评价,如果没有好工具,只能通过PPT或者一些其它排版工具,复制粘贴一堆内容,还要调整大小,位置,很不方便。

    用户7054460

扫码关注云+社区

领取腾讯云代金券