浅拷贝与深拷贝的个人理解:
假设B去拷贝A的内容。
浅拷贝:B与A共用同一个内存地址,读取的值都指向同一块内存地址,所以无论A还是B对值进行修改,最终改的是内存地址里面的值,即改了A,B同时值也会改变。
深拷贝:B开辟一块新的内存地址,然后把A的值复制到B所在的内存地址上,修改B时,不会改变A。

很多的时候,我们需要复制一个结构时,都希望改变B而不会影响到A,即深拷贝,那么typescript如何完成深拷贝呢:

1.【伪】深拷贝:
使用typescript提供的接口:(Object).assign();

var test = {zien:23,sad:13, clz:{ling:1}};var test2 = {};
(<any>Object).assign(test2, test);test2["zien"] = 30;
test2["clz"]["ling"] = 2;for (var k in test){console.log(k, test[k]);
}
console.log("------------------------------------------");
for (var k in test2){console.log(k, test2[k]);
}

输出结果如下:

zien 23
sad 13
clz { ling: 2 }
------------------------------------------
zien 30
sad 13
clz { ling: 2 }

可以看到修改了B的zien,A的zien并没有改变,所以算是深拷贝。
但为什么称之为【伪】深拷贝,因为看到修改了test2[“clz”][“ling”] = 2;之后,A和B的值都改了,所以可以定义为,这种拷贝方式只能深拷贝第一层的数据,包含有更深层次的数据并不会进行深拷贝。

2.【真】深拷贝:
一个简单的思路就是把需要拷贝的内容通过json转成字符串,然后再用json把字符串转成对应的对象类型。

var test = {zien:23,sad:13, clz:{ling:1}};
var test3 = JSON.parse(JSON.stringify(test));test3["zien"] = 30;
test3["clz"]["ling"] = 2;for (var k in test){console.log(k, test[k]);
}console.log("------------------------------------------");
for (var k in test3){console.log(k, test3[k]);
}

输出结果:

zien 23
sad 13
clz { ling: 1 }
------------------------------------------
zien 30
sad 13
clz { ling: 2 }

测试结果确实是我们想要的,进行了一次完美的深拷贝。

typescript浅拷贝与深拷贝相关推荐

  1. Java中的浅拷贝与深拷贝

    一.引用拷贝与对象拷贝 class Person implements Cloneable{private String name;private int age;...省略get和set方法 pro ...

  2. js之浅拷贝和深拷贝

    js数据类型主要分基本数据类型和引用数据类型.前者包括Number,String等,后者主要是Object,因此以下会针对不同的数据类型来分析,需要的朋友可以参考一下 1.js内存 js内存,或者说大 ...

  3. 43 JavaScript中的浅拷贝与深拷贝

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.浅拷贝与深拷贝 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用. 深拷贝拷贝多层,每 ...

  4. 【进阶4-1期】详细解析赋值、浅拷贝和深拷贝的区别

    一.赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为下面 2 部分 基本数据类型:赋值,赋值之后两个变量互不影响 引用数据类型:赋址,两个变量具有相同的引用,指向同一个对象,相互之间有 ...

  5. C# 之String以及浅拷贝与深拷贝

    C# 之String以及浅拷贝与深拷贝  一.String到底是值类型还是引用类型 MSDN 中明确指出 String 是引用类型而不是值类型,但 String 表面上用起来却像是值类型,这又是什么原 ...

  6. C# 浅拷贝与深拷贝区别 解惑篇

    问题起源: 昨天被同事问到一个浅拷贝与深拷贝区别的问题,说实在的,记得在学校时在书在看过相关概念区别. 只是,那时的在校生,又有几个能对书本上那写的尽量让鬼都看不懂知识能清晰的理解呢. 工作后虽然也有 ...

  7. clone是深拷贝还是浅拷贝_Cloneable接口的作用与探索理解浅拷贝与深拷贝

    导读:本文将主要讨论设计模式--原型模式中,关于cloneable接口及浅拷贝与深拷贝的概念. 原型模式的理解 关于原型模式的理解,我在网上发现一个有趣且助于理解原型模式的例子在这里分享一下:火影忍者 ...

  8. Java的浅拷贝与深拷贝总结

    Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去.举例说明:比如,对象A和对象B都属于类S,具有属性a和b.那么对对象A进行拷贝 ...

  9. 说说JS中的浅拷贝与深拷贝

    outline: 为什么要说JS中深拷贝与浅拷贝 JS对类型的分类 immutable与mutable 简单类型检测 浅拷贝VS深拷贝 为什么要说JS中深拷贝与浅拷贝 近来在研读underscore的 ...

最新文章

  1. python之变量操作
  2. python画直方图成绩分析-使用Python绘制直方图和正态分布曲线
  3. 基于jQuery的图片异步加载和预加载实例
  4. python人工智能——机器学习——数据的划分和介绍
  5. Iveely搜索引擎二三题,用你的智慧来解决吧!
  6. opencv学习笔记2--存取图像元素
  7. java random用法_JAVA面试题(1)
  8. Android RecyclerView (十)组件化封装
  9. Global.asax 文件
  10. shapenet各类数据(转载)
  11. linux内核编译选项ccl,嵌入式Linux学习笔记(一)
  12. php7 捕获语法错误,PHP7 method_exists未捕获错误:函数名称必须是字符串
  13. JAVA学习第六十三课 — 关于client服务端 amp;amp; URL类 amp; URLConnection
  14. js 刷新,返回上一步,前进,后退,
  15. 《仙剑奇侠传六》游戏感言
  16. 米思齐——简易呼吸灯
  17. 中国与印度软件工程师之比较…
  18. 推荐一些学习类APP
  19. vs2019开发android应用,VS 2019开发APP(一)界面和代码
  20. winin10怎么锁定计算机,win10系统下设置电脑固定ip地址的方法

热门文章

  1. chrome 浏览器中罗技鼠标滚轮失灵问题解决方法
  2. 输入一个班级全体学生的成绩,输出不及格的学生成绩和及格学生的平均成绩
  3. 计算机系统盘涨满怎么办,win7系统C盘突然就满了怎么办?win7系统盘突然爆满了三种解决方法图文教程...
  4. 酷播云H5播放器自动播放与循环播放
  5. 【图像处理】-- 利用python实现组合数,随机选择6个方向中的4个方向
  6. vue-aplayer
  7. 软件工程期末展示材料——RUC自习助手
  8. 井下通风类毕业论文文献包含哪些?
  9. java.lang.VerifyError: Verifier rejected class ...解决方案
  10. 杂记——4.书写spring时出现的Error creating bean with name ‘user0‘ defined in file错误