温故知新-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 条评论
登录 后参与评论

相关文章

  • js库 - 浅拷贝 & 深拷贝

    学了堆栈内存空间,应该就理解了什么叫简单数据类型存在栈内存,复杂数据类型存在堆内存了。

    xing.org1^
  • js的深拷贝,浅拷贝

    对于字符串类型,浅复制是对值的复制,对于对象来说,浅复制是对对象地址的复制,并没 有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性...

    山河木马
  • JS浅拷贝与深拷贝

    本来只想改变obj2的 value 的值,但是改变之后连obj1的值也一同改变了,很显然,这不是我们想要的的结果。

    九旬
  • JS 深拷贝与浅拷贝

    其实在工作写代码和面试中,会经常碰到这两个概念:深拷贝,浅拷贝。但今天的重点是深拷贝。

    Umbrella1024
  • JS深拷贝

    一开始没理解什么是循环结构, 后来在MDN的一个文章中看到了, 就类似于下图这样的循环结构

    治电小白菜
  • js的深拷贝和浅拷贝

    说到深拷贝与浅拷贝,为什么会有这两种概念呢,根本原因就在于js的两种数据类型:基本数据类型和引用数据类型,两种数据类型存储方式不同。

    OECOM
  • JS基础知识总结(二):浅拷贝与深拷贝

    上一篇JS基础知识总结(一)主要了介绍变量类型相关的基础知识,本文将介绍JS的深拷贝和浅拷贝的有关内容。

    前端林子
  • js实现深拷贝和浅拷贝

    浅拷贝: 思路----------把父对象的属性,全部拷贝给子对象,实现继承。 问题---------如果父对象的属性等于数组或另一个对象,那么实际上,子对象获...

    李文杨
  • 【JS专栏】JS对象的浅拷贝与深拷贝

    自己创建一个新的对象,来接受你要重新复制或引用的对象值。如果对象属性是基本的数据类型,复制的就是基本类型的值给新对象;但如果属性是引用数据类型,复制的就是内存中...

    Vam的金豆之路
  • JS深拷贝方法

    薛定喵君
  • JS中数组的深拷贝和浅拷贝

    变量保存的是一个指针,存放在栈内存中,指针指向一个位置,这个位置就是存放在堆内存引用类型的值

    杨肆月
  • 理清JS中的深拷贝与浅拷贝

    浅拷贝是对象的逐位复制。创建一个新对象,该对象具有原始对象中值的精确副本。如果对象的任何字段是对其他对象的引用,则只复制引用地址,即,复制内存地址。

    前端小智@大迁世界
  • js中的深浅拷贝

    js中的深浅拷贝 js中有深拷贝、浅拷贝一说,所谓的深浅拷贝是针对value类型为引用类型(函数、对象、数组)而言的,大概理解的就是: 浅拷贝: 拷贝出...

    用户1141560
  • JS实现深浅拷贝

    TimothyJia
  • Java 浅拷贝、深拷贝,你知多少?

    在 Java 开发中,对象拷贝或者说对象克隆是常有的事,对象克隆最终都离不开直接赋值、浅拷贝、深拷贝 这三种方式,其中直接赋值应该是我们最常用的一种方式吧,对于...

    平头哥的技术博文
  • Java 浅拷贝、深拷贝,你知多少?

    这是今天我们在技术群里面讨论的一个 Java 知识点,讨论的相当激烈,由于对这一块使用的比较少,所以对这一块多少有些盲区。这篇文章总结了所讨论的内...

    Bug开发工程师
  • JS浅拷贝与深拷贝的学习记录

    大象无痕
  • 温故而知新

    做嵌入式开发控制系统,应该经常会用到PID(比例,积分,微分,proportional,integral,derivative)算法,PID 控制器以各种形...

    用户1605515
  • 温故知新,HTTP/2

    去年年底,据国际互联网工程任务组( IETF )消息,HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3,即有望成为 HTTP 协议的第三个正式...

    半吊子全栈工匠

扫码关注云+社区

领取腾讯云代金券