美文网首页
Java Script 浅拷贝,深拷贝

Java Script 浅拷贝,深拷贝

作者: keepWriteCode | 来源:发表于2021-07-21 11:41 被阅读0次

    浅拷贝

     var obj = {
        name : 'zhou',
        sex : 'male',
        age : 18,
     }
    var obj1 = {
    
    }
    //浅拷贝
    function clone (Target, Orgin) {
        for(var props in Orgin){
            Target[props] = Orgin[props]
        }
        console.log(Target)
    }
    clone(obj1,obj);
    

    深拷贝

    // 思路:1.循环遍历 for-in(遍历对象,返回的是key)
    // 2,判断对象属性的数据类型是否未非原始值。
    // 原始值:number,string,Boolean,null,undefined。引用值:Object,Array(key为0,1,2的特殊对象)
    // 3,若为引用值再判断是数组还是对象。 判断方法:typeof ,instanceof  toString  constructer
    // 4,新建对应的数组或对象 
    // 5, 递归
    
    var obj = {
        name : 'zhou',
        sex : 'female',
        age : 18,
        identify : ['adb', 123, true],
        husband : {
            name : 'tang',
            daughter : {
                name : 'guo',
                by : null
            }
        },
        by: null,
    }
    
    var obj1 = {
    
    }
    
    function deepClone (Target, Origin) {
        var Target = Target || {}
        var toStr = Object.prototype.toString
        for ( var prop in Origin) {
            if(Origin.hasOwnProperty(prop)){
                if(Origin[prop] !== null && typeof(Origin[prop]) == 'object'){
                    Target[prop] = (toStr.call(Origin[prop]) == [object Array]) ? [] : {}
                    deepClone(Target[prop], Origin[prop])
                } else {
                    Target[prop] = Origin[prop]
                }
            }
        }
    }
    
    deepClone(obj1,obj);
    console.log(obj1);
    

    相关文章

      网友评论

          本文标题:Java Script 浅拷贝,深拷贝

          本文链接:https://www.haomeiwen.com/subject/ptcjmltx.html