js 深度克隆

Posted chris-zy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 深度克隆相关的知识,希望对你有一定的参考价值。

js中赋值主要有两种赋值形式,一种是值引用,另一种是址引用(地址)。

一般对象赋值的时候,都是地址引用,所以在修改新对象的时候,其实修改了在内存区地址上的值。

为了达到值引用的效果,所以有 深度克隆的概念。   ps:自己理解的,被误导了别怪我

实现方式一:

function deepClone(origin, target) 
    var target = target || ,
        toStr = Object.prototype.toString,
        arrStr = ‘[object Array]‘;

    for (var prop in origin) 
        if (origin.hasOwnProperty(prop)) 
            if (origin[prop] !== ‘null‘ && typeof (origin[prop]) == ‘object‘) 
                if (toStr.call(origin[prop]) == arrStr) 
                    target[prop] = []
                 else 
                    target[prop] = 
                
                deepClone(origin[prop], target[prop])
            
         else 
            target[prop] = origin[prop];
        
    
    return target;

  实现方式二:利用JSON转换   

function deepClone(origin,target)
    var target = target || ;
    target = JSON.parse(JSON.stringify(origin));
    return target;

  不知道大家为什么不喜欢用json转换 ,不知道这样转的弊端,欢迎大家补充。   

 

以上是关于js 深度克隆的主要内容,如果未能解决你的问题,请参考以下文章

JSON对象实现深度克隆

js深度克隆对象

js 递归实现深度克隆与浅克隆

谈谈js中深度克隆和浅度克隆

js浅度克隆/深度克隆

Js深度克隆解析