• javascript 深度克隆对象


    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;
           }
      }

  • 相关阅读:
    C++11中右值引用和移动语义
    面试题3:自己实现单链表
    C++中指针和引用、数组之间的区别
    C++中对象模型
    C++中虚函数的动态绑定和多态性
    C++11中多线程库
    C++中友元
    C++中迭代器原理、失效和简单实现
    C++11中智能指针的原理、使用、实现
    C++中模板与泛型编程
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/3284563.html
Copyright © 2020-2023  润新知