作家
登录

Javascript深拷贝

作者: 来源: 2017-05-24 16:06:09 阅读 我要评论

有时刻保存了dom元素, 一不当心进行深拷贝,膳绫擎的深拷贝函数就缺乏了对Element元素的断定。而断定Element元素要应用instanceof来断定。因为对于不合的标签,tostring会返回对应不合的标签的构造函数。

Javascript深拷贝

深拷贝(deepClone)?

与深拷贝相对的就是浅拷贝,很多初学者在接触这个感念的时刻,是很懵逼的。

为啥要用深拷贝?

在很多情况下,我们都须要给变量赋值,给内存地址付与一个值,然则在赋值引用值类型的时刻,只是共享一个内存区域,导致赋值的时刻,还跟之前的值保持一向性。

看一个具体的例子

  1. // 给test赋值了一个对象 
  2.  
  3. var test = { 
  4.  
  5. a: 'a'
  6.  
  7. b: 'b' 
  8.  
  9. }; 
  10.  
  11.   
  12.  
  13. // 将test赋值给test2 
  14.  
  15. // 此时test和test2是共享了同一块内存对象,这也就是浅拷贝 
  16.  
  17. var test2 = test; 
  18.  
  19.   
  20.  
  21. test2.a = 'a2'
  22.  
  23.   
  24.  
  25. test.a === 'a2'// 为true  

图解:

这下就很好懂得为什么引用值类型数据互相竽暌拱响问题。

实现

实现一个深拷贝函数,就不得不说javascript的数值类型。

断定javascript类型

javascript中有以下根本类型

类型 描述 undefined undefined类型只有一个值undefined,它是变量未被赋值时的值 null null类型也只有一个值null, 它是一个空的对象引用 Boolean Boolean有两种取值true和false String 它表示文本信息 Number 它表示数字信息 Object 它是一系列属性的无序集合, 包含函数Function和数组Array

应用typeof是无法断定function和array的,这里应用Object.prototype.toString办法。 默认情况下,每个对象都邑大年夜Object上持续到toString()办法,如不雅这个办法没有被这个对象自身或者更接近的上层原型上的同名办法覆盖(掩蔽),则调用该对象的toString()办法时会返回”[object type]”,这里的字符串type表示了一个对象类型

  1. function type(obj) { 
  2.  
  3. var toString = Object.prototype.toString; 
  4.  
  5. var map = { 
  6.  
  7.     '[object Boolean]'  : 'boolean'
  8.  
  9.     '[object Number]'   : 'number'
  10.  
  11.     '[object String]'   : 'string'
  12.  
  13.     '[object Function]' : 'function'
  14.  
  15.  1/4    1 2 3 4 下一页 尾页

      推荐阅读

      千万千万不要运行的Linux命令

    文中列出的敕令绝对弗成以运行,即使你认为很好奇也不可,除非你是在虚拟机上运行(出现问题你可以还原),因为它们会实实袈内涵的破坏你的体系。所以不在root等高等治理权限下履行敕令是很>>>详细阅读


    本文标题:Javascript深拷贝

    地址:http://www.17bianji.com/lsqh/35401.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)