用json方法来作深拷贝应该知道的一点东西!

时间:2022-09-14 14:51:10

之前写js比较多的的时候也写过深拷贝,浅拷贝,继承啥的,还有自定义的监听事件。然而过了很久都忘了。

最近在项目上用的深拷贝都是 b = JSON.parse( JSON.stringify(a) )  ,没有深究过原理,也没考量过百分百的正确性。只是用了很多次没啥错误现象。

然而在群里有人问到怎么深拷贝,我就甩出了这个简单的方法。有大神出来说这个是不大正确的。瞬间懵逼,经过大神指点以及自己普及。总算发现坑了,一阵虚汗!

坑点在于,如果要深拷贝的对象属性值为undefined或者是function的时候,会被过滤掉!

用json方法来作深拷贝应该知道的一点东西!

1.JSON不支持NaN,Infinity,甚至精确的浮点数,更别说循环引用和function了。

2.序列化就是序列化, 反序列化就是反序列化, 不要滥用.

3b = JSON.parse( JSON.stringify(a) ) 局限性:无法复制函数;原型链没了,对象就是object,所属的类没了。但是他简单,大多时候完全可以满足需求了!

顺便贴上好用的深拷贝函数   

  var a={
    m:undefined,
    b:2,
    c:[1,2,3],
    d:[1,[2,3],4],
    e:null,
    f:function(){
      console.log('11')
    }
  }
  function deepCopy(p,c){
    var i;
    c = c||{};
    for(i in p){
      if(p.hasOwnProperty(i)){
        if(typeof(p[i])==="object"){
          c[i] = Array.isArray(p[i])?[]:{};
          deepCopy(p[i],c[i]);
        }else{
          c[i] = p[i];
        }
      }
    }
    return c;
  }
  var b=deepCopy(b,a)
  console.log(b)

打印结果:

用json方法来作深拷贝应该知道的一点东西!

  

用json方法来作深拷贝应该知道的一点东西!的更多相关文章

  1. 关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑

    JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了 就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反 ...

  2. 靠谱的datatable转json方法

    今天有之前同事问我要datatable转json的方法,以前自己也弄过,但感觉网上有很多不靠谱的方法.所以自己在博客里记录一个,当然也是网上找的,但是这个靠谱一点,起码可以用不会报错,所以叫他靠谱的d ...

  3. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  4. 处理MVC中默认的Json方法返回时间的问题

    利用 Json方法返回 数据时,如果有时间格式,会变成 "\/Date(1369419656217)\/" 这个样子,问了同事找到个解决方法 using Newtonsoft.Js ...

  5. Java和JavaScript中使用Json方法大全

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka   摘要:JSON(JavaScript Object Notation) 是一种轻量级的数 ...

  6. MVC Json方法里的一个坑

    MVC Controller类下面有这样一个方法 // // Summary: // Creates a System.Web.Mvc.JsonResult object that serialize ...

  7. [django]django 3种返回json方法

    django 3种返回json方法 1.手动组装字典返回 from django.http import JsonResponse, HttpResponse from django.shortcut ...

  8. Json学习总结(1)——Java和JavaScript中使用Json方法大全

    摘要:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语 ...

  9. 3、看源码MVC中的Controllr的Json方法

    无论ViewResult还是JsonResult都继承ActionResult,ActionResult里只有一个方法ExecuteResult 1.Controllr的Json方法 实际上是new ...

随机推荐

  1. nginx环境下配置nagios-关于start_perl_cgi.sh

    >/dev/ rm $dir/logs/perl-fcgi.sock >/dev/ echo  }    start ()  {  rm $dir/now_start_perl_fcgi. ...

  2. 关于高并发的aotomic

    AtomicInteger线程安全的根源,熟悉并发的同学一定知道在java中处理并发主要有两种方式: 1,synchronized关键字,这个大家应当都各种面试和笔试中经常遇到. 2,volatile ...

  3. Uncaught TypeError: Cannot read property 'insertAdjacentHTML' of null

    在开发Ext 项目中如果遇到 Uncaught TypeError: Cannot read property 'insertAdjacentHTML' of null 这个错误,检查下renderT ...

  4. php连接oracle数据库转载

    php连接oracle数据库及查询数据的方法 投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-12-29 这篇文章主要介绍了php连接oracle数据库及查询数据的方法 ...

  5. POJ2891 - Strange Way to Express Integers(模线性方程组)

    题目大意 求最小整数x,满足x≡a[i](mod m[i])(没有保证所有m[i]两两互质) 题解 中国剩余定理显然不行....只能用方程组两两合并的方法求出最终的解,刘汝佳黑书P230有讲~~具体证 ...

  6. LinkedHashMap实现LRU缓存算法

    LinkedHashMap的get()方法除了返回元素之外还可以把被访问的元素放到链表的底端,这样一来每次顶端的元素就是remove的元素. 构造函数如下: public LinkedHashMap  ...

  7. 做好平衡有多难?谈MMO的职业设计

    转自:http://www.gameres.com/804893.html 首先要明确个概念:平衡不是在YY好的职业设计基础上去做调整,而是从游戏设计的开始就要打造一套有标准.可调节的游戏设计框架. ...

  8. ZooKeeper简述

    一.简介 ZooKeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,集群管理,命名空间,配置维护等.ZooKeeper使 ...

  9. MyBatis.1入门篇

    一:简介 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statem ...

  10. 两个星期,用Flutter撸个APP

    前言 Flutter是Google推出的跨平台的解决方案,Slogan是"Design beautiful apps",国内也有知名企业在使用和推广,例如阿里.美团都有在尝试. 个 ...