JavaScript实现对象或者数组的深拷贝(深复制或者深克隆)

//深克隆
function deepClone(obj){
    var cloneObj
    //当obj是一个简单值时
    if(obj && typeof obj!=='object'){
        cloneObj=obj
        console.log("plain value")
    }
    //当obj是对象或者数组的时候
    else if(obj && typeof obj==='object'){
        console.log("object value")
        cloneObj=Array.isArray(obj) ? [] : {}

        //数组的元素或者对象的key
        for(var key in obj){
            if(obj.hasOwnProperty(key)){
                //如果是对象或者数组
                if(obj[key] && typeof obj[key]=== "object"){
                    cloneObj[key]=deepClone(obj[key])
                }else{
                    cloneObj[key]=obj[key]
                }
            }
        }
    }
    return cloneObj
}
var testObj={x:0,y:1,z:{a:3,b:4}}
var result=deepClone(testObj)
result.z.a=888
console.log(result)
console.log(testObj)

var testArray=[9,10,[2,4]]
var resultArray=deepClone(testArray)
resultArray[2][1]='aaa'
console.log(testArray)
console.log(resultArray)
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页