js一般有两种不同数据类型的值:

基本类型(包括undefined,Null,boolean,String,Number),按值传递;

引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内存中的地址。例如:

  

如果你修改b的值,那么a变量的值也发生了变化。

克隆或者拷贝分为2种:浅度克隆(拷贝),深度克隆(拷贝);

浅度克隆:基本类型为值传递,对象仍为引用传递。

深度克隆:所有元素或属性均完全克隆,并于原引用类型完全独立,即,在后面修改对象的属性的时候,原对象不会被修改。

我的代码如下: 主要用了递归。

function cloneObject(obj){
          if(obj === null){
              return null;
          }else if(obj instanceof Array){
             var arr = [];
             for(var i = 0, ilen = obj.length; i < ilen; i+=1){
                 arr[i] = obj[i];
             }
             return arr;
        }else if(obj instanceof Date || obj instanceof RegExp || obj instanceof Function){
             return obj;
        }else if(obj instanceof Object){
            var o = {};
            for(var i in obj){
                if(obj.hasOwnProperty(i)){
                    o[i] = cloneObject(obj[i]);
                 }
            }
            return o;
       }else{
           return obj;
       }
  }

转载于:https://www.cnblogs.com/yu-709213564/p/6652178.html

javascript 深度克隆对象相关推荐

  1. [js] 请写一个性能最好的深度克隆对象的方法

    [js] 请写一个性能最好的深度克隆对象的方法 const deepClone = (obj) => {const copy = obj instance Array ? [] : {};for ...

  2. 深度克隆对象【前端每日一题-19】

    深度克隆对象的方法有哪些?并把你认为最好的写出来. 此题不多说,必须掌握,工作中经常需要用到. JSON.stringify 很明显可以看到输出的对象中没有say方法和undefined属性,所以JS ...

  3. 实现 Cloneable接口深度克隆对象

    实现 Cloneable接口深度克隆对象 Body对象中有Head对象,Head对象中有Face对象,Face对象中有int变量和String变量. 实现Boby对象的深度克隆,看下面代码: pack ...

  4. Java深度克隆对象

    关于对象的克隆,Java自带了一个clone()方法. 但是众所周知,这个clone()方法只是做浅层的对象复制,仅适用于对象属性是简单数据类型(int/long/float等)的场景.对于对象属性是 ...

  5. 在JavaScript中深度克隆对象的最有效方法是什么?

    克隆JavaScript对象的最有效方法是什么? 我见过obj = eval(uneval(o)); 正在使用,但这是非标准的,仅受Firefox支持 . 我已经完成了obj = JSON.parse ...

  6. Javascript 深度克隆中的循环引用问题解决和代码优化

    概要 在前端项目开发中,我们经常需要深度克隆JS对象.在克隆代码开发过程中,我们经常会遇到数组判定或对象循环引用的问题. 本文通过实例来解决上述问题 代码及实现 常见深度克隆JS对象的代码 funct ...

  7. 覆盖所有类型的javascript深度克隆

    第一种方法(只适用于基础类型) const newObj = JSON.parse(JSON.stringify(oldObj)); 第二种方法 const getType = (obj)=> ...

  8. javascript 深度克隆

    关键词 :递归 主要分为 数组 .对象.以及基本类型 function clone(Obj) {            var buf;            if (Obj instanceof A ...

  9. Java 快速深度克隆对象 [Faster Deep Copies of Java Objects]

    最近深刻纠结于复杂对象的clone, 实在苦恼于写多个对象的clone函数,于是收集网上的deep clone方法,真是适合我这种懒人~~ The java.lang.Object root supe ...

最新文章

  1. kubernetes资源对象之security context
  2. oracle 丁勇 从零开始学_8.3.1 多表查询分类
  3. BootLoader引导程序制作及移植(一)
  4. 你的灯亮着吗?阅读笔记之一
  5. 第二节:深入剖析Thread的五大方法、数据槽、内存栅栏
  6. 英语口语 week13 Monday
  7. 信息学奥赛一本通(1047:判断能否被3,5,7整除)
  8. 2022年有哪些值得学习的Java开源项目?这7个火爆了
  9. C语言 int y=10 do,删除学生信息算法执行完case10输入y 之后do whil
  10. MTCNN-tensorflow源码解析之训练PNet网络-train_PNet.py
  11. iOS学习——Socket
  12. 如何成功发布一个MSMQ的Windows服务
  13. centos7修复libcrypto.so.10缺失的问题,导致ssh无法运行
  14. sql家庭成员、收入支出数据库
  15. 国开大学计算机实操,国开大学计算机实操答案一.doc
  16. 重点分析!转型中的好莱坞发生了哪些变局?
  17. 赛博念经!自带RGB的电子木鱼,能敲出《般若心经》,网友:想买
  18. sqlserver把某个字段多行逗号隔开
  19. RAAT: Relation-Augmented Attention Transformer for Relation Modeling in Document-Level 论文解读
  20. 影视观影神器:ZY Player for Mac

热门文章

  1. 14.关于原子性的相关介绍
  2. Decision stump、Bootstraping、bagging、boosting、Random Forest、Gradient Boosting
  3. 语义分割--Full-Resolution Residual Networks for Semantic Segmentation in Street Scenes
  4. vscode 使用ssh密钥登录远程Linux -- vscode remote linux ssh key
  5. 146. LRU Cache--java,python解法
  6. 查询距离两天的数据_一张图就可以管理城建数据?!实景城市三维平台来了
  7. Spring data redis乱码问题
  8. mac玩rust用什么画质_玩七日杀Steam游戏用什么加速器?电狐加速器
  9. 实测实量数据表格_施工现场全套实测实量操作图解,值得收藏!
  10. 计算机二级公共基础知识总结百度云,计算机二级公共基础知识总结详细版本[精]...