深拷贝与浅拷贝
1、浅拷贝
1.1复杂数据类型使用同一个地址,改变复杂数据类型,不改变基本数据类型**
<script>
var username = '闷倒驴'
var user = {username:'闷倒驴',sex:'女',body:{weight:'50kg',height:'160'}}
// 浅拷贝
var userCopy = Object.assign({},user)
user.sex = '男'
user.body.weight = '100kg'
console.log(user);
console.log(userCopy);
</script>
1.2内存空间分配:
user userCopy对象在堆空间中开辟不同的地址,当进行浅拷贝时,拷贝前后的数据,复杂数据类型会改变
1.3 输出结果:
2、深拷贝
2.1 给复杂类型数据再开辟一个堆空间(分配不同地址),拷贝前后的数据互不影响
<script>
var username = '闷倒驴'
var user = {username:'闷倒驴',sex:'女',body:{weight:'50kg',height:'160'}}
// 浅拷贝
var userCopy = JSON.parse(JSON.stringify(user))
user.sex = '男'
user.body.weight = '100kg'
console.log(user);
console.log(userCopy);
</script>
2.2 内存空间分配
为复杂数据类型再开一个堆空间,分别存储数据,因此拷贝前后的数据互不影响
2.3 运行结果
习题总结
改变复杂类型 基本类型不改