浅拷贝
利用Object.assign()
let a = {
age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1
深拷贝
最常用序列化反序列化
let a = {
age: 1,
jobs: {
first: 'FE'
}
}
let b = JSON.parse(JSON.stringify(a))
a.jobs.first = 'native'
console.log(b.jobs.first) // FE
但是有如下几个缺点:
对于function,正则,undefined,symbol无效
不能解决循环引用的的对象
需要忽略原型
除此之外,还有手写递归的方式,jq的extends。
如果你所需拷贝的对象含有内置类型并且不包含函数,可以使用 MessageChannel
还有lodash的深拷贝函数,可以解决上述问题