js的深拷贝,浅拷贝

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

对于字符串类型,浅复制是对值的复制,对于对象来说,浅复制是对对象地址的复制,并没 有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变,而深复制则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。深复制实现代码如下:
可以从两个方法进行解决。

第一种方法、通过递归解析解决

var china = {nation : '中国',
    birthplaces:['北京','上海','广州'],
    skincolr :'yellow',
    friends:['sk','ls']
}
//深复制,要想达到深复制就需要用递归
function deepCopy(o,c){var c = c || {}for(var i in o){if(typeof o[i] === 'object'){//要考虑深复制问题了
            if(o[i].constructor === Array){//这是数组
                c[i] =[]}else{//这是对象
                c[i] = {}}deepCopy(o[i],c[i])}else{c[i] = o[i]}}return c
}
var result = {name:'result'}
result = deepCopy(china,result)
console.dir(result)

第二种方法:通过JSON解析解决

var test ={name:{xing:{first:'张',
            second:'李'
        },
        ming:'老头'
    },
    age :40,
    friend :['隔壁老王','宋经纪','同事']
}
var result = JSON.parse(JSON.stringify(test))
result.age = 30
result.name.xing.first = '往'
result.friend.push('fdagldf;ghad')
console.dir(test)
console.dir(result)

 

转载于:https://my.oschina.net/u/2306318/blog/1620180


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部