15、浅拷贝和深拷贝
浅拷贝和深拷贝其实都是对其他数据的一份拷贝,主要的就是区别
浅拷贝:只拷贝第一层的数据,更深层的数据只拷贝了地址
深拷贝:层层拷贝,将每一级的数据都拷贝下来
1)浅拷贝
浅拷贝一般有Object.assign()和用扩展运算符的方法
let obj1 = {
a: 1,
b: 2
}
let obj2 = {
c: 3,
d: 4
}
let newobj1 = Object.assign(obj1, obj2)
let newobj2 = {...obj1,...obj2}
console.log(newobj1, newobj2);
这是只有一层的情况下,当obj1或者obj2在嵌套一层时,无法拷贝数据只是拷贝了数据的地址,当原数据被改变时,拷贝后的数据也会改变,如下图
2)深拷贝
深拷贝有JSON.parse结合JSON.stringify、自定义封装递归函数或者Object.create()的方法
var obj = {
id: 1,
name: '不会学习的菜鸡',
msg: {
age: 18
},
color: ['pink', 'green']
}
var newObj = {}
//封装函数
function deepCopy(newObj, obj) {
for (var key in obj) {
//判断属性