作家
登录

Javascript深拷贝

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

return map[toString.call(obj)]; 
  •  
  •  
  • 实现deepClone

    对于非引用值类型的数值,直接赋值,而对于引用值类型(object)还须要再次遍历,递归赋值。

    详见https://github.com/jashkenas/underscore/blob/master/underscore.js

    1. function deepClone(data) { 
    2.  
    3. var t = type(data), o, i, ni; 
    4.  
    5. if(t === 'array') { 
    6.  
    7.     o = []; 
    8.  
    9. }else if( t === 'object') { 
    10.  
    11.     o = {}; 
    12.  
    13. }else { 
    14.  
    15.     return data; 
    16.  
    17.  
    18. if(t === 'array') { 
    19.  
    20.     for (i = 0, ni = data.length; i < ni; i++) { 
    21.  
    22.         o.push(deepClone(data[i])); 
    23.  
    24.     } 
    25.  
    26.     return o; 
    27.  
    28. }else if( t === 'object') { 
    29.  
    30.     for( i in data) { 
    31.  
    32.         o[i] = deepClone(data[i]); 
    33.  
    34.     } 
    35.  
    36.     return o; 
    37.  
    38.  
    39.  

    到这里差不多也就实现完了深拷贝,又有人觉的怎么没有实现浅拷贝呢?

    这里有个点大年夜扼要留意下,对于function类型,博主这里是直接赋值的,照样共享一个内存值。这是因为函数更多的是完成某些功能,有个输入值和返回值,并且对于上层营业而言更多的是完成营业功能,并不须要真正将函数深拷贝。

    然则function类型要怎么拷贝呢?

    其实博主只想到了用new来操作一下,然则function就会履行一遍,不敢想象会有什么履行结不雅哦!o(╯□╰)o!其它临时还没有什么好的设法主意,迎接大年夜家指导哦!

    浅拷贝?

    对于浅拷贝而言,可以懂得为只操作一个合营的内存区域!这里会存在危险!(。﹏。*) 。

    如不雅直接操作这个共享的数据,不做控制的话,会经常出现数据异常,被其它部分更改。所以应当不要直接操作数据源,给数据源封装一些办法,来对数据来进行CURD操作。

    到这里估计就差不多了,然则作为一个前端,不仅仅推敲javascript本身,还得推敲到dom、浏览器等。

    Element类型

    来看下面代码,结不雅会返回啥呢?

    1. Object.prototype.toString.call(document.getElementsByTagName('div')[0]) 

    谜底是[object HTMLDivElement]

    其它方法?

    1. jquery的实现

    详见https://github.com/jquery/jquery/blob/master/src/core.js

    2. underscore的实现

    3. lodash的实现

    详见https://github.com/lodash/lodash/blob/master/lodash.js

    4. JSON实现

    javascript深拷贝是初学者甚至有经验的开辟者,都邑经常碰到问题,并不克不及很好的懂得javascript的深拷贝。

    先经由过程JSON.stringify一下,然后再JSON.parse一下,就能实现深拷贝。然则数据类型只支撑根本数值类型。


    1.   推荐阅读

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

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


      本文标题:Javascript深拷贝

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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