2019-01-09 深拷贝浅拷贝

原理:https://www.cnblogs.com/echolun/p/7889848.html
相关文章:
https://www.jianshu.com/p/0d7bd31ccf43
https://www.jianshu.com/p/503c746f6150

//递归方法
function deepClone(obj){
    let objClone = Array.isArray(obj)?[]:{};
    if(obj && typeof obj==="object"){
        for(key in obj){
            if(obj.hasOwnProperty(key)){
                //判断ojb子元素是否为对象,如果是,递归复制
                if(obj[key]&&typeof obj[key] ==="object"){
                    objClone[key] = deepClone(obj[key]);
                }else{
                    //如果不是,简单复制
                    objClone[key] = obj[key];
                }
            }
        }
    }
    return objClone;
}  

//ES6创建并克隆对象
var newObj=Object.assign({}, obj);

//借用JSON对象的parse和stringify
function deepClone(obj){
    let _obj = JSON.stringify(obj),
        objClone = JSON.parse(_obj);
    return objClone
} 

//JQ的extend方法。
$.extend( [deep ], target, object1 [, objectN ] )
deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝
target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。
object1  objectN可选。 Object类型 第一个以及第N个被合并的对象。 

let a=[0,1,[2,3],4],
    b=$.extend(true,[],a);
a[0]=1;
a[2][0]=1;
console.log(a,b);

注意:concat方法与slice方法,他们都不是真正的深拷贝

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1-------- 走进前端 2-------- jQuery 3-------- CSS 4-------- A...
    依依玖玥阅读 2,360评论 0 34
  • 原创链接 一、Java面试题java有多重要,对于做android的我们,不需要多说了,let’s go (1)J...
    李福来阅读 2,340评论 0 5
  • 网站: http://ui4app.com/category 技术网站: http://www.bestsdk.c...
    LYPC_下里巴人阅读 1,084评论 0 1
  • 记不起她的名字的,好像没有大名,连乳名都提不起。唯一确定的是和我一样,也姓王,那是随她爹。算算,如果她长大了,应该...
    文时柒阅读 545评论 5 4
  • 天气阴。黄沙漫天,空气质量严重污染。 事情杂乱,人不能乱。 今天算是满满当当的一天,然而这只是一个开始…学校的课程...
    W的两个世界阅读 225评论 0 0