javascript最新深度克隆对象方法

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
window.onload = function(){
  var arr = [{"a":"a"},{"b":"b"}];
  var clone = cloneObj(arr);
  clone.a = "b";
  console.log(clone);
  console.log(arr);
}
function cloneObj(obj){   //obj 可能为[{a:"a"},{b:"b"}]和{c:"c"}
  var newObj = obj.constructor == Array ?[]:{};   //如果JSON对象存在,则可以使用其方法JSON.stringify() 和JSON.parse()
  if(typeof JSON == "object"){
    var str = JSON.stringify(obj);
    newObj = JSON.parse(str);
    }else{       //如果JSON对象不存在,则需要递归实现克隆对象
      for(var i in obj){
        if(obj.hasOwnProperty(i)){         //arguments.callee() 和cloneObj()其实是一样的,arguments.callee()代码扩展性好
        newObj[i] = typeof obj[i] == "object" ?arguments.callee(obj[i]):obj[i];
        }
      }
  }
  return newObj;
}
</script>
</head> <body>
</body>
</html>

javascript最新深度克隆对象方法的更多相关文章

  1. [转载] javascript实现深度克隆

    js一般有两种不同数据类型的值: 基本类型(包括undefined,Null,boolean,String,Number),按值传递: 引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内 ...

  2. js深度克隆对象

    js深度克隆对象 js深度克隆对象简单的记录一下,如下代码: var obj = { typeOf: function(obj) { const toString = Object.prototype ...

  3. javascript 深度克隆对象

    js一般有两种不同数据类型的值: 基本类型(包括undefined,Null,boolean,String,Number),按值传递: 引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内 ...

  4. javascript深度克隆对象

    /** * * @param obj * @returns {*} */ //深度克隆 function cloneObject(obj) { if (obj === null || typeof(o ...

  5. JavaScript的深度克隆

    1.JavaScript的五种基本数据类型: Number.String.Boolean.null.undefined. 2.typeof返回的六种数据类型: Number.String.Boolea ...

  6. 原生JavaScript之深度克隆

    先看一下克隆成功后的结果 深度克隆就是将obj的属性克隆到obj1上面,并且在obj上面修改属性不影响obj1上面的属性. 1.先把所有的值都遍历一遍(看是引用值和原始值)用for ( var pro ...

  7. Java 深度克隆 clone()方法重写 equals()方法的重写

    1.为什么要重写clone()方法? 答案:Java中的浅度复制是不会把要复制的那个对象的引用对象重新开辟一个新的引用空间,当我们需要深度复制的时候,这个时候我们就要重写clone()方法. 2.为什 ...

  8. JavaScript中的Array对象方法调用

    方法concat for  循环与for in 循环 <html> <head> <script type="text/javascript"> ...

  9. javascript构造函数深度克隆递归

    <script type="text/javascript"> var obj={ name:'段丛磊', gex:18, sss:['李伟',18], fun:fun ...

随机推荐

  1. datagrid中load,reload,loadData方法的区别

    它有其中有load,reload,loadData这三个方法,它们都有相同的功能,都是加载数据的,但又有区别. load方法,比如我已经定义一个datagrid的id为grid,那这个方法的使用方式为 ...

  2. nmap与ntop

    http://blog.csdn.net/aspirationflow/article/details/7694274

  3. OpenJudge计算概论-计算鞍点

    /*======================================================================== 计算鞍点 总时间限制: 1000ms 内存限制: ...

  4. OpenJudge计算概论-第二个重复出现的数

    /*======================================================================== 第二个重复出现的数 总时间限制: 1000ms 内 ...

  5. HTML5之Canvas绘图实例——曲线图

    实现正弦.余弦和正切函数画图(如下图):调试环境:Firefox

  6. linux设置系统日期时间

    设置当前日期: date -s 08/06/2015 设置当前时间:date -s 10:03:00 写入BIOS: clock -w 显示当前日期时间: date

  7. 宝洁的Pvp

    1.公司宗旨(Purpose) 我们生产和提供更佳品质及价值的产品,以改善全球消费者的生活.作为回报,我们将会获得领先的市场销售地位和利润增长,从而令我们的员工.我们的股东以及我们的生活.工作所处的社 ...

  8. linux xargs参数

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...

  9. MongoDB 启动mongo不带DB

    > mongo --nodb > conn = new Mongo("localhost:27017"); > db = conn.getDB("tes ...

  10. Windows下使用批处理设置IP地址,DNS

    自动获取IP地址: echo 本地连接 改成你想要改的连接名 比如 无线网络连接set cname=本地连接 echo %cname% 正在设置自动获得IP地址,请稍等...... netsh int ...